{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core",
      "artifactVersion": "2021.66.4",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core",
          "org.nuxeo.ecm.core.api",
          "org.nuxeo.ecm.core.bulk",
          "org.nuxeo.ecm.core.cache",
          "org.nuxeo.ecm.core.event",
          "org.nuxeo.ecm.core.io",
          "org.nuxeo.ecm.core.mimetype",
          "org.nuxeo.ecm.core.mongodb",
          "org.nuxeo.ecm.core.persistence",
          "org.nuxeo.ecm.core.query",
          "org.nuxeo.ecm.core.redis",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.platform.el"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core",
        "id": "grp:org.nuxeo.ecm.core",
        "name": "org.nuxeo.ecm.core",
        "parentIds": [],
        "readmes": [],
        "version": "2021.66"
      },
      "bundleId": "org.nuxeo.ecm.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.CoreService",
          "documentation": "\n  The core service provides a way to register version removal policies\n  \n",
          "documentationHtml": "<p>\nThe core service provides a way to register version removal policies\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.CoreService",
              "descriptors": [
                "org.nuxeo.ecm.core.CoreServicePolicyDescriptor"
              ],
              "documentation": "\n      Used to register the version removal policy, which must implement\n      VersionRemovalPolicy.\n      <code>\n    <policy class=\"...\"/>\n</code>\n",
              "documentationHtml": "<p>\nUsed to register the version removal policy, which must implement\nVersionRemovalPolicy.\n</p><p></p><pre><code>    &lt;policy class&#61;&#34;...&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreService/ExtensionPoints/org.nuxeo.ecm.core.CoreService--versionRemovalPolicy",
              "id": "org.nuxeo.ecm.core.CoreService--versionRemovalPolicy",
              "label": "versionRemovalPolicy (org.nuxeo.ecm.core.CoreService)",
              "name": "versionRemovalPolicy",
              "version": "2021.66.4"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.CoreService",
              "descriptors": [
                "org.nuxeo.ecm.core.CoreServiceOrphanVersionRemovalFilterDescriptor"
              ],
              "documentation": "\n      Used to register filter that are used by the default VersionRemovalPolicy implementation to check asynchronously what versions can really be removed.\n      <code>\n    <filter class=\"...\"/>\n</code>\n",
              "documentationHtml": "<p>\nUsed to register filter that are used by the default VersionRemovalPolicy implementation to check asynchronously what versions can really be removed.\n</p><p></p><pre><code>    &lt;filter class&#61;&#34;...&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreService/ExtensionPoints/org.nuxeo.ecm.core.CoreService--orphanVersionRemovalFilter",
              "id": "org.nuxeo.ecm.core.CoreService--orphanVersionRemovalFilter",
              "label": "orphanVersionRemovalFilter (org.nuxeo.ecm.core.CoreService)",
              "name": "orphanVersionRemovalFilter",
              "version": "2021.66.4"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreService",
          "name": "org.nuxeo.ecm.core.CoreService",
          "requirements": [],
          "resolutionOrder": 83,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.CoreService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreService/Services/org.nuxeo.ecm.core.CoreService",
              "id": "org.nuxeo.ecm.core.CoreService",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 809,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.CoreService\" version=\"1.0\">\n  <documentation>\n  The core service provides a way to register version removal policies\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.CoreService\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.CoreService\" />\n  </service>\n\n  <extension-point name=\"versionRemovalPolicy\">\n    <documentation>\n      Used to register the version removal policy, which must implement\n      VersionRemovalPolicy.\n      <code>\n        <policy class=\"...\"/>\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.core.CoreServicePolicyDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"orphanVersionRemovalFilter\">\n    <documentation>\n      Used to register filter that are used by the default VersionRemovalPolicy implementation to check asynchronously what versions can really be removed.\n      <code>\n        <filter class=\"...\"/>\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.core.CoreServiceOrphanVersionRemovalFilterDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/CoreService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentation": "\n\n    This component is contributing the core types and schemas and other core extensions.\n\n    @author <a href=\"mailto:bs@nuxeo.com\">Bogdan Stefanescu</a>\n",
          "documentationHtml": "<p>\nThis component is contributing the core types and schemas and other core extensions.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "The core schemas\n",
              "documentationHtml": "<p>\nThe core schemas</p>",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions/Contributions/org.nuxeo.ecm.core.CoreExtensions--schema",
              "id": "org.nuxeo.ecm.core.CoreExtensions--schema",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <documentation>The core schemas</documentation>\n    <!-- XXX AT: prefixes should be set, see NXP-1152 -->\n    <schema name=\"core-types\" src=\"schema/core-types.xsd\"/>\n    <schema name=\"base\" src=\"schema/base.xsd\"/>\n    <schema name=\"relation\" prefix=\"relation\" src=\"schema/relation.xsd\"/>\n    <schema name=\"common\" src=\"schema/common.xsd\"/>\n    <schema name=\"dublincore\" prefix=\"dc\" src=\"schema/dublincore.xsd\"/>\n    <schema name=\"uid\" src=\"schema/uid.xsd\"/>\n    <schema name=\"file\" src=\"schema/file.xsd\"/>\n    <schema name=\"files\" src=\"schema/files.xsd\"/>\n    <schema name=\"note\" src=\"schema/note.xsd\"/>\n    <schema name=\"domain\" src=\"schema/domain.xsd\"/>\n    <schema name=\"relatedtext\" src=\"schema/relatedtext.xsd\"/>\n\n    <schema name=\"publishing\" prefix=\"publish\" src=\"schema/publishing.xsd\"/>\n    <schema name=\"webcontainer\" prefix=\"webc\" src=\"schema/webcontainer.xsd\"/>\n\n    <schema name=\"collection\" prefix=\"collection\" src=\"schema/collection.xsd\"/>\n    <schema isVersionWritable=\"true\" name=\"collectionMember\" prefix=\"collectionMember\" src=\"schema/collectionMember.xsd\"/>\n\n    <property indexOrder=\"ascending\" name=\"documentIds\" schema=\"collection\"/>\n    <property indexOrder=\"ascending\" name=\"collectionIds\" schema=\"collectionMember\"/>\n    <property name=\"created\" schema=\"dublincore\" secured=\"true\"/>\n    <property indexOrder=\"descending\" name=\"modified\" schema=\"dublincore\" secured=\"true\"/>\n    <property name=\"creator\" schema=\"dublincore\" secured=\"true\"/>\n    <property name=\"contributors\" schema=\"dublincore\" secured=\"true\"/>\n    <property name=\"lastContributor\" schema=\"dublincore\" secured=\"true\"/>\n    <!-- Removed since 9.1 -->\n    <property deprecation=\"removed\" name=\"size\" schema=\"common\"/>\n    <property deprecation=\"removed\" fallback=\"content/name\" name=\"filename\" schema=\"file\"/>\n    <property deprecation=\"removed\" fallback=\"files/*/file/name\" name=\"files/*/filename\" schema=\"files\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "The default type manager configuration\n",
              "documentationHtml": "<p>\nThe default type manager configuration</p>",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions/Contributions/org.nuxeo.ecm.core.CoreExtensions--configuration",
              "id": "org.nuxeo.ecm.core.CoreExtensions--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <documentation>The default type manager configuration</documentation>\n    <configuration>\n      <prefetch>common, dublincore</prefetch>\n      <clearComplexPropertyBeforeSet>true</clearComplexPropertyBeforeSet> <!-- false is DEPRECATED since 9.3 -->\n      <allowVersionWriteForDublinCore>false</allowVersionWriteForDublinCore> <!-- true is DEPRECATED since 10.3 -->\n    </configuration>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "The core document types\n",
              "documentationHtml": "<p>\nThe core document types</p>",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions/Contributions/org.nuxeo.ecm.core.CoreExtensions--doctype",
              "id": "org.nuxeo.ecm.core.CoreExtensions--doctype",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <documentation>The core document types</documentation>\n\n    <!-- standard facets with no schema -->\n    <facet name=\"Folderish\" perDocumentQuery=\"false\"/> <!-- used by system -->\n    <facet name=\"Orderable\"/> <!-- used by system -->\n    <facet name=\"Versionable\"/> <!-- used by system -->\n    <facet name=\"Downloadable\"/>\n    <facet name=\"Publishable\"/>\n    <facet name=\"PublishSpace\"/>\n    <facet name=\"MasterPublishSpace\"/>\n    <facet name=\"Commentable\"/>\n    <facet name=\"WebView\"/>\n    <facet name=\"SuperSpace\"/>\n    <facet name=\"HiddenInNavigation\" perDocumentQuery=\"false\"/>\n    <facet name=\"SystemDocument\"/>\n    <facet name=\"NotFulltextIndexable\"/>\n    <facet name=\"BigFolder\"/>\n    <facet name=\"HiddenInCreation\" perDocumentQuery=\"false\"/>\n\n    <!-- facet to be used for full-text indexing of related text content\n      (e.g. comments, annotations, tags...) -->\n    <facet name=\"HasRelatedText\">\n      <schema name=\"relatedtext\"/>\n    </facet>\n\n    <facet name=\"Collection\" perDocumentQuery=\"false\">\n      <schema name=\"collection\"/>\n    </facet>\n\n    <facet name=\"NotCollectionMember\" perDocumentQuery=\"false\"/>\n\n    <facet name=\"CollectionMember\">\n      <schema name=\"collectionMember\"/>\n    </facet>\n\n    <proxies>\n      <schema name=\"collectionMember\"/>\n    </proxies>\n\n    <doctype extends=\"Document\" name=\"Folder\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Folderish\"/>\n      <subtypes>\n        <type>Collection</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"OrderedFolder\">\n      <facet name=\"Orderable\"/>\n      <subtypes>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"HiddenFolder\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Root\">\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Domain</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Relation\"> <!-- no extends -->\n      <schema name=\"relation\"/>\n      <schema name=\"dublincore\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Domain\">\n      <schema name=\"domain\"/>\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>WorkspaceRoot</type>\n        <type>SectionRoot</type>\n        <type>TemplateRoot</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"WorkspaceRoot\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Workspace\">\n      <!-- for logo -->\n      <schema name=\"file\"/>\n      <schema name=\"webcontainer\"/>\n      <schema name=\"publishing\"/>\n      <!-- the content of webcontainer -->\n      <schema name=\"files\"/>\n      <facet name=\"SuperSpace\"/>\n      <subtypes>\n        <type>Collection</type>\n        <type>Workspace</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"TemplateRoot\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"SectionRoot\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"MasterPublishSpace\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Section</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Section\">\n      <!-- for logo -->\n      <schema name=\"file\"/>\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"PublishSpace\"/>\n      <subtypes>\n        <type>Section</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"File\">\n      <schema name=\"common\"/>\n      <schema name=\"file\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <facet name=\"Downloadable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"Note\">\n      <schema name=\"common\"/>\n      <schema name=\"note\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"Collection\">\n      <schema name=\"uid\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Collection\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Collections\">\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Collection</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions/Contributions/org.nuxeo.ecm.core.CoreExtensions--listener",
              "id": "org.nuxeo.ecm.core.CoreExtensions--listener",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener class=\"org.nuxeo.ecm.core.model.EmptyNameFixer\" name=\"emptyNameFixer\" priority=\"1000\">\n      <event>aboutToImport</event>\n      <event>aboutToCreate</event>\n      <event>aboutToMove</event>\n    </listener>\n\n    <listener class=\"org.nuxeo.ecm.core.model.DuplicatedNameFixer\" name=\"duplicatedNameFixer\" priority=\"2000\">\n      <event>aboutToImport</event>\n      <event>aboutToCreate</event>\n      <event>aboutToMove</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions",
          "name": "org.nuxeo.ecm.core.CoreExtensions",
          "requirements": [],
          "resolutionOrder": 84,
          "services": [],
          "startOrder": 116,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.CoreExtensions\" version=\"1.0\">\n\n  <documentation>\n    This component is contributing the core types and schemas and other core extensions.\n\n    @author <a href=\"mailto:bs@nuxeo.com\">Bogdan Stefanescu</a>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"schema\">\n    <documentation>The core schemas</documentation>\n    <!-- XXX AT: prefixes should be set, see NXP-1152 -->\n    <schema name=\"core-types\" src=\"schema/core-types.xsd\"/>\n    <schema name=\"base\" src=\"schema/base.xsd\"/>\n    <schema name=\"relation\" prefix=\"relation\" src=\"schema/relation.xsd\"/>\n    <schema name=\"common\" src=\"schema/common.xsd\"/>\n    <schema name=\"dublincore\" prefix=\"dc\" src=\"schema/dublincore.xsd\"/>\n    <schema name=\"uid\" src=\"schema/uid.xsd\"/>\n    <schema name=\"file\" src=\"schema/file.xsd\"/>\n    <schema name=\"files\" src=\"schema/files.xsd\"/>\n    <schema name=\"note\" src=\"schema/note.xsd\"/>\n    <schema name=\"domain\" src=\"schema/domain.xsd\"/>\n    <schema name=\"relatedtext\" src=\"schema/relatedtext.xsd\"/>\n\n    <schema name=\"publishing\" prefix=\"publish\" src=\"schema/publishing.xsd\" />\n    <schema name=\"webcontainer\" prefix=\"webc\" src=\"schema/webcontainer.xsd\"/>\n\n    <schema name=\"collection\" src=\"schema/collection.xsd\" prefix=\"collection\" />\n    <schema name=\"collectionMember\" src=\"schema/collectionMember.xsd\"\n      prefix=\"collectionMember\" isVersionWritable=\"true\"/>\n\n    <property schema=\"collection\" name=\"documentIds\" indexOrder=\"ascending\" />\n    <property schema=\"collectionMember\" name=\"collectionIds\" indexOrder=\"ascending\" />\n    <property schema=\"dublincore\" name=\"created\" secured=\"true\" />\n    <property schema=\"dublincore\" name=\"modified\" secured=\"true\" indexOrder=\"descending\" />\n    <property schema=\"dublincore\" name=\"creator\" secured=\"true\" />\n    <property schema=\"dublincore\" name=\"contributors\" secured=\"true\" />\n    <property schema=\"dublincore\" name=\"lastContributor\" secured=\"true\" />\n    <!-- Removed since 9.1 -->\n    <property schema=\"common\" name=\"size\" deprecation=\"removed\" />\n    <property schema=\"file\" name=\"filename\" deprecation=\"removed\" fallback=\"content/name\" />\n    <property schema=\"files\" name=\"files/*/filename\" deprecation=\"removed\" fallback=\"files/*/file/name\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"configuration\">\n    <documentation>The default type manager configuration</documentation>\n    <configuration>\n      <prefetch>common, dublincore</prefetch>\n      <clearComplexPropertyBeforeSet>true</clearComplexPropertyBeforeSet> <!-- false is DEPRECATED since 9.3 -->\n      <allowVersionWriteForDublinCore>false</allowVersionWriteForDublinCore> <!-- true is DEPRECATED since 10.3 -->\n    </configuration>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"doctype\">\n    <documentation>The core document types</documentation>\n\n    <!-- standard facets with no schema -->\n    <facet name=\"Folderish\" perDocumentQuery=\"false\"/> <!-- used by system -->\n    <facet name=\"Orderable\" /> <!-- used by system -->\n    <facet name=\"Versionable\" /> <!-- used by system -->\n    <facet name=\"Downloadable\" />\n    <facet name=\"Publishable\" />\n    <facet name=\"PublishSpace\" />\n    <facet name=\"MasterPublishSpace\" />\n    <facet name=\"Commentable\" />\n    <facet name=\"WebView\" />\n    <facet name=\"SuperSpace\" />\n    <facet name=\"HiddenInNavigation\" perDocumentQuery=\"false\"/>\n    <facet name=\"SystemDocument\" />\n    <facet name=\"NotFulltextIndexable\" />\n    <facet name=\"BigFolder\" />\n    <facet name=\"HiddenInCreation\" perDocumentQuery=\"false\"/>\n\n    <!-- facet to be used for full-text indexing of related text content\n      (e.g. comments, annotations, tags...) -->\n    <facet name=\"HasRelatedText\">\n      <schema name=\"relatedtext\" />\n    </facet>\n\n    <facet name=\"Collection\" perDocumentQuery=\"false\" >\n      <schema name=\"collection\" />\n    </facet>\n\n    <facet name=\"NotCollectionMember\" perDocumentQuery=\"false\"/>\n\n    <facet name=\"CollectionMember\">\n      <schema name=\"collectionMember\" />\n    </facet>\n\n    <proxies>\n      <schema name=\"collectionMember\" />\n    </proxies>\n\n    <doctype name=\"Folder\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Folderish\"/>\n      <subtypes>\n        <type>Collection</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"OrderedFolder\" extends=\"Folder\">\n      <facet name=\"Orderable\"/>\n      <subtypes>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"HiddenFolder\" extends=\"Folder\">\n      <facet name=\"HiddenInNavigation\" />\n    </doctype>\n\n    <doctype name=\"Root\" extends=\"Folder\">\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Domain</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Relation\"> <!-- no extends -->\n      <schema name=\"relation\"/>\n      <schema name=\"dublincore\"/>\n    </doctype>\n\n    <doctype name=\"Domain\" extends=\"Folder\">\n      <schema name=\"domain\"/>\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>WorkspaceRoot</type>\n        <type>SectionRoot</type>\n        <type>TemplateRoot</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"WorkspaceRoot\" extends=\"Folder\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Workspace\" extends=\"Folder\">\n      <!-- for logo -->\n      <schema name=\"file\"/>\n      <schema name=\"webcontainer\"/>\n      <schema name=\"publishing\"/>\n      <!-- the content of webcontainer -->\n      <schema name=\"files\" />\n      <facet name=\"SuperSpace\"/>\n      <subtypes>\n        <type>Collection</type>\n        <type>Workspace</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"TemplateRoot\" extends=\"Folder\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"SectionRoot\" extends=\"Folder\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"MasterPublishSpace\" />\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Section</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Section\" extends=\"Folder\">\n      <!-- for logo -->\n      <schema name=\"file\"/>\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"PublishSpace\" />\n      <subtypes>\n        <type>Section</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"File\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"file\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <facet name=\"Downloadable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n    </doctype>\n\n    <doctype name=\"Note\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"note\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n    </doctype>\n\n    <doctype name=\"Collection\" extends=\"Document\">\n      <schema name=\"uid\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Collection\" />\n      <facet name=\"NotCollectionMember\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"common\" />\n    </doctype>\n\n    <doctype name=\"Collections\" extends=\"Folder\">\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Collection</type>\n      </subtypes>\n    </doctype>\n\n  </extension>\n\n   <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"emptyNameFixer\"\n        class=\"org.nuxeo.ecm.core.model.EmptyNameFixer\" priority=\"1000\">\n      <event>aboutToImport</event>\n      <event>aboutToCreate</event>\n      <event>aboutToMove</event>\n    </listener>\n\n    <listener name=\"duplicatedNameFixer\"\n        class=\"org.nuxeo.ecm.core.model.DuplicatedNameFixer\" priority=\"2000\">\n      <event>aboutToImport</event>\n      <event>aboutToCreate</event>\n      <event>aboutToMove</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/CoreExtensions.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.lifecycle.impl.LifeCycleServiceImpl",
          "documentation": "\n\n    Service that deals with life cycle.\n\n    @version 1.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n",
          "documentationHtml": "<p>\nService that deals with life cycle.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "descriptors": [
                "org.nuxeo.ecm.core.lifecycle.extensions.LifeCycleDescriptor"
              ],
              "documentation": "\n      Extension point for registering life cycle definition.\n      <p/>\n\n      A life cycle is a state-transition model described as an XML document.\n      <p/>\n\n      A life cycle within Nuxeo Core describes only the states and the\n      transitions without any security policy whatsoever. For instance, the\n      workflow service (or BPM service) will be responsible of the security\n      policy and actors involved.\n    \n",
              "documentationHtml": "<p>\nExtension point for registering life cycle definition.\n</p><p>\nA life cycle is a state-transition model described as an XML document.\n</p><p>\nA life cycle within Nuxeo Core describes only the states and the\ntransitions without any security policy whatsoever. For instance, the\nworkflow service (or BPM service) will be responsible of the security\npolicy and actors involved.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.lifecycle.LifeCycleService/ExtensionPoints/org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "id": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "label": "lifecycle (org.nuxeo.ecm.core.lifecycle.LifeCycleService)",
              "name": "lifecycle",
              "version": "2021.66.4"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "descriptors": [
                "org.nuxeo.ecm.core.lifecycle.extensions.LifeCycleTypesDescriptor"
              ],
              "documentation": "\n      Extension point for registering document type to life cycle mappings.\n      <p/>\n\n      For instance, you can specify that a document type <i>File</i>\n will follow a <i>default</i>\n\n      life cycle where <i>default</i>\n is the name of a registered life cycle.\n    \n",
              "documentationHtml": "<p>\nExtension point for registering document type to life cycle mappings.\n</p><p>\nFor instance, you can specify that a document type <i>File</i>\nwill follow a <i>default</i>\n</p><p>\nlife cycle where <i>default</i>\nis the name of a registered life cycle.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.lifecycle.LifeCycleService/ExtensionPoints/org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "id": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "label": "types (org.nuxeo.ecm.core.lifecycle.LifeCycleService)",
              "name": "types",
              "version": "2021.66.4"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.lifecycle.LifeCycleService",
          "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
          "requirements": [],
          "resolutionOrder": 88,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.lifecycle.LifeCycleService/Services/org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "id": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 825,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n  <documentation>\n    Service that deals with life cycle.\n\n    @version 1.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.lifecycle.impl.LifeCycleServiceImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" />\n  </service>\n\n  <extension-point name=\"lifecycle\">\n\n    <documentation>\n      Extension point for registering life cycle definition.\n      <p/>\n      A life cycle is a state-transition model described as an XML document.\n      <p/>\n      A life cycle within Nuxeo Core describes only the states and the\n      transitions without any security policy whatsoever. For instance, the\n      workflow service (or BPM service) will be responsible of the security\n      policy and actors involved.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.lifecycle.extensions.LifeCycleDescriptor\"/>\n\n  </extension-point>\n\n  <extension-point name=\"types\">\n\n    <documentation>\n      Extension point for registering document type to life cycle mappings.\n      <p/>\n      For instance, you can specify that a document type <i>File</i> will follow a <i>default</i>\n      life cycle where <i>default</i> is the name of a registered life cycle.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.lifecycle.extensions.LifeCycleTypesDescriptor\"/>\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/LifeCycleService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentation": "\n\n    Nuxeo core life cycle contributions.\n\n    @version 1.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n",
          "documentationHtml": "<p>\nNuxeo core life cycle contributions.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "Nuxeo core default life cycle definition.\n",
              "documentationHtml": "<p>\nNuxeo core default life cycle definition.</p>",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.LifecycleCoreExtensions/Contributions/org.nuxeo.ecm.core.LifecycleCoreExtensions--lifecycle",
              "id": "org.nuxeo.ecm.core.LifecycleCoreExtensions--lifecycle",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <documentation>Nuxeo core default life cycle definition.</documentation>\n\n    <lifecycle defaultInitial=\"project\" name=\"default\">\n      <transitions>\n        <transition destinationState=\"approved\" name=\"approve\">\n          <description>Approve the content</description>\n        </transition>\n        <transition destinationState=\"obsolete\" name=\"obsolete\">\n          <description>Content becomes obsolete</description>\n        </transition>\n        <transition destinationState=\"deleted\" name=\"delete\">\n          <description>Move document to trash (temporary delete)</description>\n        </transition>\n        <transition destinationState=\"project\" name=\"undelete\">\n          <description>Recover the document from trash</description>\n        </transition>\n        <transition destinationState=\"project\" name=\"backToProject\">\n          <description>Recover the document from trash</description>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"Default state\" initial=\"true\" name=\"project\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>obsolete</transition>\n            <transition>delete</transition>\n          </transitions>\n        </state>\n        <state description=\"Content has been validated\" name=\"approved\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state description=\"Content is obsolete\" name=\"obsolete\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state description=\"Document is deleted\" name=\"deleted\">\n          <transitions>\n            <transition>undelete</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Nuxeo core default document types to life cycles mapping\n    \n",
              "documentationHtml": "<p>\nNuxeo core default document types to life cycles mapping\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.LifecycleCoreExtensions/Contributions/org.nuxeo.ecm.core.LifecycleCoreExtensions--types",
              "id": "org.nuxeo.ecm.core.LifecycleCoreExtensions--types",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <documentation>\n      Nuxeo core default document types to life cycles mapping\n    </documentation>\n\n    <types>\n      <type name=\"File\">default</type>\n      <type name=\"Note\">default</type>\n      <type name=\"Calendar\">default</type>\n      <type name=\"Folder\">default</type>\n      <type name=\"OrderedFolder\">default</type>\n      <type name=\"Workspace\">default</type>\n      <type name=\"Domain\">default</type>\n      <type name=\"Root\">default</type>\n      <type name=\"Section\">default</type>\n      <type name=\"WorkspaceRoot\">default</type>\n      <type name=\"SectionRoot\">default</type>\n      <type name=\"TemplateRoot\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.LifecycleCoreExtensions",
          "name": "org.nuxeo.ecm.core.LifecycleCoreExtensions",
          "requirements": [],
          "resolutionOrder": 89,
          "services": [],
          "startOrder": 118,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.LifecycleCoreExtensions\">\n\n  <documentation>\n    Nuxeo core life cycle contributions.\n\n    @version 1.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"lifecycle\">\n\n    <documentation>Nuxeo core default life cycle definition.</documentation>\n\n    <lifecycle name=\"default\" defaultInitial=\"project\">\n      <transitions>\n        <transition name=\"approve\" destinationState=\"approved\">\n          <description>Approve the content</description>\n        </transition>\n        <transition name=\"obsolete\" destinationState=\"obsolete\">\n          <description>Content becomes obsolete</description>\n        </transition>\n        <transition name=\"delete\" destinationState=\"deleted\">\n          <description>Move document to trash (temporary delete)</description>\n        </transition>\n        <transition name=\"undelete\" destinationState=\"project\">\n          <description>Recover the document from trash</description>\n        </transition>\n        <transition name=\"backToProject\" destinationState=\"project\">\n          <description>Recover the document from trash</description>\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"project\" description=\"Default state\" initial=\"true\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>obsolete</transition>\n            <transition>delete</transition>\n          </transitions>\n        </state>\n        <state name=\"approved\" description=\"Content has been validated\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state name=\"obsolete\" description=\"Content is obsolete\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state name=\"deleted\" description=\"Document is deleted\">\n          <transitions>\n            <transition>undelete</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n\n    <documentation>\n      Nuxeo core default document types to life cycles mapping\n    </documentation>\n\n    <types>\n      <type name=\"File\">default</type>\n      <type name=\"Note\">default</type>\n      <type name=\"Calendar\">default</type>\n      <type name=\"Folder\">default</type>\n      <type name=\"OrderedFolder\">default</type>\n      <type name=\"Workspace\">default</type>\n      <type name=\"Domain\">default</type>\n      <type name=\"Root\">default</type>\n      <type name=\"Section\">default</type>\n      <type name=\"WorkspaceRoot\">default</type>\n      <type name=\"SectionRoot\">default</type>\n      <type name=\"TemplateRoot\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/LifeCycleCoreExtensions.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Listener for life cycle change events.\n\n      If event occurs on a folder, it will recurse on children to perform the\n      same transition if possible.\n\n      If the transition event is about marking documents as \"deleted\", and a\n      child cannot perform the transition, it will be removed.\n\n      Undelete transitions are not recursed on the children, however a special\n      documentUndeleted event has the same role and is processed by this listener.\n    \n",
              "documentationHtml": "<p>\nListener for life cycle change events.\n</p><p>\nIf event occurs on a folder, it will recurse on children to perform the\nsame transition if possible.\n</p><p>\nIf the transition event is about marking documents as &#34;deleted&#34;, and a\nchild cannot perform the transition, it will be removed.\n</p><p>\nUndelete transitions are not recursed on the children, however a special\ndocumentUndeleted event has the same role and is processed by this listener.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.event.lifecycle.listener/Contributions/org.nuxeo.ecm.core.event.lifecycle.listener--listener",
              "id": "org.nuxeo.ecm.core.event.lifecycle.listener--listener",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <documentation>\n      Listener for life cycle change events.\n\n      If event occurs on a folder, it will recurse on children to perform the\n      same transition if possible.\n\n      If the transition event is about marking documents as \"deleted\", and a\n      child cannot perform the transition, it will be removed.\n\n      Undelete transitions are not recursed on the children, however a special\n      documentUndeleted event has the same role and is processed by this listener.\n    </documentation>\n    <listener async=\"true\" class=\"org.nuxeo.ecm.core.lifecycle.event.BulkLifeCycleChangeListener\" name=\"bulkLifeCycleChangeListener\" postCommit=\"true\">\n      <event>lifecycle_transition_event</event>\n      <event>documentUndeleted</event>\n      <event>documentCreatedByCopy</event>\n    </listener>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      If true listener will recursive on children of document by paginate them.\n      <p/>\n\n      Default behavior is to fetch all children once.\n\n      @since 8.10-HF05, 9.2\n    \n",
              "documentationHtml": "<p>\nIf true listener will recursive on children of document by paginate them.\n</p><p>\nDefault behavior is to fetch all children once.\n</p><p>\n&#64;since 8.10-HF05, 9.2\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.event.lifecycle.listener/Contributions/org.nuxeo.ecm.core.event.lifecycle.listener--configuration",
              "id": "org.nuxeo.ecm.core.event.lifecycle.listener--configuration",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      If true listener will recursive on children of document by paginate them.\n      <p/>\n      Default behavior is to fetch all children once.\n\n      @since 8.10-HF05, 9.2\n    </documentation>\n    <property name=\"nuxeo.bulkLifeCycleChangeListener.paginate-get-children\">false</property>\n\n    <documentation>\n      If \"nuxeo.bulkLifeCycleChangeListener.paginate-get-children\" is true, this property set the page size for get\n      children calls.\n\n      @since 8.10-HF05, 9.2\n    </documentation>\n    <property name=\"nuxeo.bulkLifeCycleChangeListener.get-children-page-size\">500</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.event.lifecycle.listener",
          "name": "org.nuxeo.ecm.core.event.lifecycle.listener",
          "requirements": [],
          "resolutionOrder": 90,
          "services": [],
          "startOrder": 140,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.event.lifecycle.listener\"\n  version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <documentation>\n      Listener for life cycle change events.\n\n      If event occurs on a folder, it will recurse on children to perform the\n      same transition if possible.\n\n      If the transition event is about marking documents as \"deleted\", and a\n      child cannot perform the transition, it will be removed.\n\n      Undelete transitions are not recursed on the children, however a special\n      documentUndeleted event has the same role and is processed by this listener.\n    </documentation>\n    <listener name=\"bulkLifeCycleChangeListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.core.lifecycle.event.BulkLifeCycleChangeListener\">\n      <event>lifecycle_transition_event</event>\n      <event>documentUndeleted</event>\n      <event>documentCreatedByCopy</event>\n    </listener>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      If true listener will recursive on children of document by paginate them.\n      <p />\n      Default behavior is to fetch all children once.\n\n      @since 8.10-HF05, 9.2\n    </documentation>\n    <property name=\"nuxeo.bulkLifeCycleChangeListener.paginate-get-children\">false</property>\n\n    <documentation>\n      If \"nuxeo.bulkLifeCycleChangeListener.paginate-get-children\" is true, this property set the page size for get\n      children calls.\n\n      @since 8.10-HF05, 9.2\n    </documentation>\n    <property name=\"nuxeo.bulkLifeCycleChangeListener.get-children-page-size\">500</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/lifecycle-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.security.SecurityService",
          "documentation": "\n    The security service is responsible to check the permission on a\n    repository. Permission check will be usually forwarded to the\n    security manager defined on the repository. This may change later.\n    <p/>\n\n    It holds a permission provider that defines the list of available permission\n    names and how they are combined into groups of permissions.\n    <p/>\n\n    It also defines which permissions are high level permissions that are to be\n    managed through the end user interface and in which order they should be\n    display in management menus.\n    <p/>\n\n\n    It also holds a security policy service that can stack custom policies.\n    These policies can override default permission checks based on acls set on\n    the document and/or its parents.\n\n    @author <a href=\"mailto:bs@nuxeo.com\">Bogdan Stefanescu</a>\n\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n\n    @author <a href=\"mailto:at@nuxeo.com\">Anahide Tchertchian</a>\n",
          "documentationHtml": "<p>\nThe security service is responsible to check the permission on a\nrepository. Permission check will be usually forwarded to the\nsecurity manager defined on the repository. This may change later.\n</p><p>\nIt holds a permission provider that defines the list of available permission\nnames and how they are combined into groups of permissions.\n</p><p>\nIt also defines which permissions are high level permissions that are to be\nmanaged through the end user interface and in which order they should be\ndisplay in management menus.\n</p><p>\nIt also holds a security policy service that can stack custom policies.\nThese policies can override default permission checks based on acls set on\nthe document and/or its parents.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "descriptors": [
                "org.nuxeo.ecm.core.security.PermissionDescriptor"
              ],
              "documentation": "\n      Extension point to register permission definitions or override\n      existing permissions.\n      <p/>\n\n\n      Example to define a single atomic permissions that are not meant\n      to be displayed in the rights management screen of folders:\n      <code>\n    <permission name=\"Browse\"/>\n    <permission name=\"ReadVersion\"/>\n    <permission name=\"ReadProperties\"/>\n    <permission name=\"ReadChildren\"/>\n    <permission name=\"ReadLifeCycle\"/>\n    <permission name=\"ReviewParticipant\"/>\n</code>\n<p/>\n\n\n      Example to define a compound permission that holds many related\n      atomic permissions into a single high level (role-like)\n      permission:\n      <code>\n    <permission name=\"Read\">\n        <include>Browse</include>\n        <include>ReadVersion</include>\n        <include>ReadProperties</include>\n        <include>ReadChildren</include>\n        <include>ReadLifeCycle</include>\n        <include>ReviewParticipant</include>\n    </permission>\n</code>\n\n\n      Note that each of the included permissions should have been\n      previously registered with their on &lt;permission/&gt;\n      declaration.\n\n      <p/>\n\n\n      It is later possible to override that definition in another\n      contribution to that extension-point to add a new permission\n      'CustomPerm' and remove 'ReviewParticipant':\n      <code>\n    <permission name=\"CustomPerm\"/>\n    <permission name=\"Read\">\n        <include>CustomPerm</include>\n        <remove>ReviewParticipant</remove>\n    </permission>\n</code>\n<p/>\n\n\n      Eventually the permissions declaration also accept 'alias' tags to\n      handle backward compatibility with deprecated permissions:\n      <code>\n    <permission name=\"ReadVersion\">\n        <documentation>\n            The Version permission is deprecated since its name is ambiguous,\n            use ReadPermission instead.\n          </documentation>\n        <alias>Version</alias>\n    </permission>\n</code>\n\n\n      NB: the alias feature is parsed by the extension point but the\n      underlying SecurityManager implementation does not leverage it\n      yet.\n\n    \n",
              "documentationHtml": "<p>\nExtension point to register permission definitions or override\nexisting permissions.\n</p><p>\nExample to define a single atomic permissions that are not meant\nto be displayed in the rights management screen of folders:\n</p><p></p><pre><code>    &lt;permission name&#61;&#34;Browse&#34;/&gt;\n    &lt;permission name&#61;&#34;ReadVersion&#34;/&gt;\n    &lt;permission name&#61;&#34;ReadProperties&#34;/&gt;\n    &lt;permission name&#61;&#34;ReadChildren&#34;/&gt;\n    &lt;permission name&#61;&#34;ReadLifeCycle&#34;/&gt;\n    &lt;permission name&#61;&#34;ReviewParticipant&#34;/&gt;\n</code></pre><p>\nExample to define a compound permission that holds many related\natomic permissions into a single high level (role-like)\npermission:\n</p><p></p><pre><code>    &lt;permission name&#61;&#34;Read&#34;&gt;\n        &lt;include&gt;Browse&lt;/include&gt;\n        &lt;include&gt;ReadVersion&lt;/include&gt;\n        &lt;include&gt;ReadProperties&lt;/include&gt;\n        &lt;include&gt;ReadChildren&lt;/include&gt;\n        &lt;include&gt;ReadLifeCycle&lt;/include&gt;\n        &lt;include&gt;ReviewParticipant&lt;/include&gt;\n    &lt;/permission&gt;\n</code></pre><p>\nNote that each of the included permissions should have been\npreviously registered with their on &lt;permission/&gt;\ndeclaration.\n</p><p>\nIt is later possible to override that definition in another\ncontribution to that extension-point to add a new permission\n&#39;CustomPerm&#39; and remove &#39;ReviewParticipant&#39;:\n</p><p></p><pre><code>    &lt;permission name&#61;&#34;CustomPerm&#34;/&gt;\n    &lt;permission name&#61;&#34;Read&#34;&gt;\n        &lt;include&gt;CustomPerm&lt;/include&gt;\n        &lt;remove&gt;ReviewParticipant&lt;/remove&gt;\n    &lt;/permission&gt;\n</code></pre><p>\nEventually the permissions declaration also accept &#39;alias&#39; tags to\nhandle backward compatibility with deprecated permissions:\n</p><p></p><pre><code>    &lt;permission name&#61;&#34;ReadVersion&#34;&gt;\n        &lt;documentation&gt;\n            The Version permission is deprecated since its name is ambiguous,\n            use ReadPermission instead.\n          &lt;/documentation&gt;\n        &lt;alias&gt;Version&lt;/alias&gt;\n    &lt;/permission&gt;\n</code></pre><p>\nNB: the alias feature is parsed by the extension point but the\nunderlying SecurityManager implementation does not leverage it\nyet.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/ExtensionPoints/org.nuxeo.ecm.core.security.SecurityService--permissions",
              "id": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "label": "permissions (org.nuxeo.ecm.core.security.SecurityService)",
              "name": "permissions",
              "version": "2021.66.4"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "descriptors": [
                "org.nuxeo.ecm.core.security.PermissionVisibilityDescriptor"
              ],
              "documentation": "\n      Extension point to register permission visibility in user\n      interface or override existing settings.\n      <p/>\n\n\n      Example to define the default list of permissions that are\n      manageable through the UI screens:\n      <code>\n    <visibility>\n        <item order=\"10\" show=\"true\">Read</item>\n        <item order=\"50\" show=\"true\">ReadWrite</item>\n        <item order=\"100\" show=\"true\">Everything</item>\n    </visibility>\n</code>\n\n\n      This list of options items will be displayed if no type specific\n      settings are registered.\n\n      <p/>\n\n      Example to define the default list of permissions that are\n      specific to the Section document type:\n      <code>\n    <visibility type=\"Section\">\n        <item order=\"10\" show=\"true\">Read</item>\n        <item order=\"100\" show=\"true\">Everything</item>\n    </visibility>\n</code>\n\n\n      Note: the 'show' attribute defaults to 'true' and the 'order'\n      attribute defaults to '0'.\n\n    \n",
              "documentationHtml": "<p>\nExtension point to register permission visibility in user\ninterface or override existing settings.\n</p><p>\nExample to define the default list of permissions that are\nmanageable through the UI screens:\n</p><p></p><pre><code>    &lt;visibility&gt;\n        &lt;item order&#61;&#34;10&#34; show&#61;&#34;true&#34;&gt;Read&lt;/item&gt;\n        &lt;item order&#61;&#34;50&#34; show&#61;&#34;true&#34;&gt;ReadWrite&lt;/item&gt;\n        &lt;item order&#61;&#34;100&#34; show&#61;&#34;true&#34;&gt;Everything&lt;/item&gt;\n    &lt;/visibility&gt;\n</code></pre><p>\nThis list of options items will be displayed if no type specific\nsettings are registered.\n</p><p>\nExample to define the default list of permissions that are\nspecific to the Section document type:\n</p><p></p><pre><code>    &lt;visibility type&#61;&#34;Section&#34;&gt;\n        &lt;item order&#61;&#34;10&#34; show&#61;&#34;true&#34;&gt;Read&lt;/item&gt;\n        &lt;item order&#61;&#34;100&#34; show&#61;&#34;true&#34;&gt;Everything&lt;/item&gt;\n    &lt;/visibility&gt;\n</code></pre><p>\nNote: the &#39;show&#39; attribute defaults to &#39;true&#39; and the &#39;order&#39;\nattribute defaults to &#39;0&#39;.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/ExtensionPoints/org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "id": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "label": "permissionsVisibility (org.nuxeo.ecm.core.security.SecurityService)",
              "name": "permissionsVisibility",
              "version": "2021.66.4"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "descriptors": [
                "org.nuxeo.ecm.core.security.SecurityPolicyDescriptor"
              ],
              "documentation": "\n      Extension point to register custom security policies or override existing\n      policies.\n      <p/>\n\n\n      Policies are checked in the order they are defined. They can grant or deny\n      access, in case following policies - as well as the default security check\n      relying on the acp set on the document - will be ignored. They can also\n      return an undefined access, in case following policy checks will continue.\n\n      <p/>\n\n\n      Example to define a custom policy :\n      <code>\n    <policy class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\"\n        name=\"lock\" order=\"10\"/>\n</code>\n\n\n      The class used has to implement the\n      org.nuxeo.ecm.core.security.SecurityPolicy interface.\n\n      <p/>\n\n\n      It is later possible to override that definition in another contribution\n      to that extension-point to disable or override a policy:\n      <code>\n    <policy enabled=\"false\" name=\"lock\"/>\n    <policy class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\"\n        name=\"lock\" order=\"20\"/>\n</code>\n<p/>\n\n\n      @author <a href=\"mailto:at@nuxeo.com\">Anahide Tchertchian</a>\n",
              "documentationHtml": "<p>\nExtension point to register custom security policies or override existing\npolicies.\n</p><p>\nPolicies are checked in the order they are defined. They can grant or deny\naccess, in case following policies - as well as the default security check\nrelying on the acp set on the document - will be ignored. They can also\nreturn an undefined access, in case following policy checks will continue.\n</p><p>\nExample to define a custom policy :\n</p><p></p><pre><code>    &lt;policy class&#61;&#34;org.nuxeo.ecm.core.security.LockSecurityPolicy&#34;\n        name&#61;&#34;lock&#34; order&#61;&#34;10&#34;/&gt;\n</code></pre><p>\nThe class used has to implement the\norg.nuxeo.ecm.core.security.SecurityPolicy interface.\n</p><p>\nIt is later possible to override that definition in another contribution\nto that extension-point to disable or override a policy:\n</p><p></p><pre><code>    &lt;policy enabled&#61;&#34;false&#34; name&#61;&#34;lock&#34;/&gt;\n    &lt;policy class&#61;&#34;org.nuxeo.ecm.core.security.LockSecurityPolicy&#34;\n        name&#61;&#34;lock&#34; order&#61;&#34;20&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/ExtensionPoints/org.nuxeo.ecm.core.security.SecurityService--policies",
              "id": "org.nuxeo.ecm.core.security.SecurityService--policies",
              "label": "policies (org.nuxeo.ecm.core.security.SecurityService)",
              "name": "policies",
              "version": "2021.66.4"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService",
          "name": "org.nuxeo.ecm.core.security.SecurityService",
          "requirements": [],
          "resolutionOrder": 91,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/Services/org.nuxeo.ecm.core.security.SecurityService",
              "id": "org.nuxeo.ecm.core.security.SecurityService",
              "overriden": false,
              "version": "2021.66.4"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/Services/org.nuxeo.ecm.core.api.security.PermissionProvider",
              "id": "org.nuxeo.ecm.core.api.security.PermissionProvider",
              "overriden": false,
              "version": "2021.66.4"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/Services/org.nuxeo.ecm.core.security.SecurityPolicyService",
              "id": "org.nuxeo.ecm.core.security.SecurityPolicyService",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 834,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.security.SecurityService\"\n  version=\"1.0\">\n\n  <implementation class=\"org.nuxeo.ecm.core.security.SecurityService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.security.SecurityService\" />\n    <provide interface=\"org.nuxeo.ecm.core.api.security.PermissionProvider\" />\n    <provide interface=\"org.nuxeo.ecm.core.security.SecurityPolicyService\" />\n  </service>\n\n  <documentation>\n    The security service is responsible to check the permission on a\n    repository. Permission check will be usually forwarded to the\n    security manager defined on the repository. This may change later.\n    <p />\n    It holds a permission provider that defines the list of available permission\n    names and how they are combined into groups of permissions.\n    <p />\n    It also defines which permissions are high level permissions that are to be\n    managed through the end user interface and in which order they should be\n    display in management menus.\n    <p />\n    It also holds a security policy service that can stack custom policies.\n    These policies can override default permission checks based on acls set on\n    the document and/or its parents.\n\n    @author <a href=\"mailto:bs@nuxeo.com\">Bogdan Stefanescu</a>\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n    @author <a href=\"mailto:at@nuxeo.com\">Anahide Tchertchian</a>\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.security.SecurityService\" />\n\n  <extension-point name=\"permissions\">\n\n    <documentation>\n      Extension point to register permission definitions or override\n      existing permissions.\n      <p />\n\n      Example to define a single atomic permissions that are not meant\n      to be displayed in the rights management screen of folders:\n      <code>\n        <permission name=\"Browse\" />\n        <permission name=\"ReadVersion\" />\n        <permission name=\"ReadProperties\" />\n        <permission name=\"ReadChildren\" />\n        <permission name=\"ReadLifeCycle\" />\n        <permission name=\"ReviewParticipant\" />\n      </code>\n\n      <p />\n\n      Example to define a compound permission that holds many related\n      atomic permissions into a single high level (role-like)\n      permission:\n      <code>\n        <permission name=\"Read\">\n          <include>Browse</include>\n          <include>ReadVersion</include>\n          <include>ReadProperties</include>\n          <include>ReadChildren</include>\n          <include>ReadLifeCycle</include>\n          <include>ReviewParticipant</include>\n        </permission>\n      </code>\n\n      Note that each of the included permissions should have been\n      previously registered with their on &lt;permission/&gt;\n      declaration.\n\n      <p />\n\n      It is later possible to override that definition in another\n      contribution to that extension-point to add a new permission\n      'CustomPerm' and remove 'ReviewParticipant':\n      <code>\n        <permission name=\"CustomPerm\" />\n\n        <permission name=\"Read\">\n          <include>CustomPerm</include>\n          <remove>ReviewParticipant</remove>\n        </permission>\n      </code>\n\n      <p />\n\n      Eventually the permissions declaration also accept 'alias' tags to\n      handle backward compatibility with deprecated permissions:\n      <code>\n        <permission name=\"ReadVersion\">\n          <documentation>\n            The Version permission is deprecated since its name is ambiguous,\n            use ReadPermission instead.\n          </documentation>\n          <alias>Version</alias>\n        </permission>\n      </code>\n\n      NB: the alias feature is parsed by the extension point but the\n      underlying SecurityManager implementation does not leverage it\n      yet.\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.security.PermissionDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"permissionsVisibility\">\n\n    <documentation>\n      Extension point to register permission visibility in user\n      interface or override existing settings.\n      <p />\n\n      Example to define the default list of permissions that are\n      manageable through the UI screens:\n      <code>\n        <visibility>\n          <item show=\"true\" order=\"10\">Read</item>\n          <item show=\"true\" order=\"50\">ReadWrite</item>\n          <item show=\"true\" order=\"100\">Everything</item>\n        </visibility>\n      </code>\n\n      This list of options items will be displayed if no type specific\n      settings are registered.\n\n      <p />\n      Example to define the default list of permissions that are\n      specific to the Section document type:\n      <code>\n        <visibility type=\"Section\">\n          <item show=\"true\" order=\"10\">Read</item>\n          <item show=\"true\" order=\"100\">Everything</item>\n        </visibility>\n      </code>\n\n      Note: the 'show' attribute defaults to 'true' and the 'order'\n      attribute defaults to '0'.\n\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.core.security.PermissionVisibilityDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"policies\">\n\n    <documentation>\n      Extension point to register custom security policies or override existing\n      policies.\n      <p />\n\n      Policies are checked in the order they are defined. They can grant or deny\n      access, in case following policies - as well as the default security check\n      relying on the acp set on the document - will be ignored. They can also\n      return an undefined access, in case following policy checks will continue.\n\n      <p />\n\n      Example to define a custom policy :\n      <code>\n        <policy name=\"lock\"\n          class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\" order=\"10\" />\n      </code>\n\n      The class used has to implement the\n      org.nuxeo.ecm.core.security.SecurityPolicy interface.\n\n      <p />\n\n      It is later possible to override that definition in another contribution\n      to that extension-point to disable or override a policy:\n      <code>\n        <policy name=\"lock\" enabled=\"false\" />\n\n        <policy name=\"lock\"\n          class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\" order=\"20\" />\n      </code>\n\n      <p />\n\n      @author <a href=\"mailto:at@nuxeo.com\">Anahide Tchertchian</a>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.security.SecurityPolicyDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/SecurityService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentation": "\n\n    Default permissions (atomic and compound) used by the core. If you\n    edit this file, please update the specification file:\n    doc/NXCore-Security.txt in core module\n\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n",
          "documentationHtml": "<p>\nDefault permissions (atomic and compound) used by the core. If you\nedit this file, please update the specification file:\ndoc/NXCore-Security.txt in core module\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPermissions/Contributions/org.nuxeo.ecm.core.security.defaultPermissions--permissions",
              "id": "org.nuxeo.ecm.core.security.defaultPermissions--permissions",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <permission name=\"Browse\"/>\n    <permission name=\"ReadProperties\">\n      <include>Browse</include>\n    </permission>\n    <permission name=\"ReadChildren\"/>\n    <permission name=\"ReadLifeCycle\"/>\n    <permission name=\"ReviewParticipant\"/>\n    <permission name=\"ReadSecurity\"/>\n\n    <permission name=\"WriteProperties\"/>\n    <permission name=\"ReadVersion\"/>\n\n    <permission name=\"WriteVersion\">\n       <include>WriteProperties</include>\n    </permission>\n\n    <permission name=\"Version\">\n       <include>ReadVersion</include>\n       <include>WriteVersion</include>\n    </permission>\n\n    <permission name=\"Read\">\n      <include>Browse</include>\n      <include>ReadVersion</include>\n      <include>ReadProperties</include>\n      <include>ReadChildren</include>\n      <include>ReadLifeCycle</include>\n      <include>ReadSecurity</include>\n      <include>ReviewParticipant</include>\n    </permission>\n\n    <permission name=\"AddChildren\"/>\n    <permission name=\"RemoveChildren\"/>\n    <permission name=\"Remove\"/>\n    <permission name=\"ManageWorkflows\"/>\n    <permission name=\"WriteLifeCycle\"/>\n    <permission name=\"Unlock\"/>\n\n    <permission name=\"Remove\">\n      <documentation>\n        NXP-10929: necessary to follow the \"delete\" transition when Trash is enabled: include WriteLifeCycle\n      </documentation>\n      <include>RemoveChildren</include>\n      <include>WriteLifeCycle</include>\n    </permission>\n\n    <permission name=\"ReadRemove\">\n      <include>Read</include>\n      <include>Remove</include>\n    </permission>\n\n    <permission name=\"Write\">\n      <include>AddChildren</include>\n      <include>WriteProperties</include>\n      <include>Remove</include>\n      <include>ManageWorkflows</include>\n      <include>WriteLifeCycle</include>\n      <include>WriteVersion</include>\n    </permission>\n\n    <permission name=\"ReadWrite\">\n      <include>Read</include>\n      <include>Write</include>\n    </permission>\n\n    <permission name=\"WriteSecurity\"/>\n\n    <permission name=\"Everything\">\n      <documentation>\n        Special permission given to administrators: god-level access\n      </documentation>\n    </permission>\n\n    <permission name=\"RestrictedRead\">\n      <documentation>\n        Deprecated - was used only for a single customer project before pluggable permission definitions\n      </documentation>\n    </permission>\n\n    <permission name=\"MakeRecord\"/>\n    <permission name=\"SetRetention\"/>\n    <permission name=\"ManageLegalHold\"/>\n    <!-- Only for flexible records -->\n    <permission name=\"UnsetRetention\"/>\n\n    <permission name=\"WriteColdStorage\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPermissions/Contributions/org.nuxeo.ecm.core.security.defaultPermissions--permissionsVisibility",
              "id": "org.nuxeo.ecm.core.security.defaultPermissions--permissionsVisibility",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"permissionsVisibility\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <visibility>\n      <item order=\"10\" show=\"true\">Read</item>\n      <item denyPermission=\"Write\" order=\"50\" show=\"true\">ReadWrite</item>\n      <item order=\"100\" show=\"true\">Everything</item>\n    </visibility>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPermissions",
          "name": "org.nuxeo.ecm.core.security.defaultPermissions",
          "requirements": [],
          "resolutionOrder": 92,
          "services": [],
          "startOrder": 164,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.security.defaultPermissions\">\n  <documentation>\n    Default permissions (atomic and compound) used by the core. If you\n    edit this file, please update the specification file:\n    doc/NXCore-Security.txt in core module\n\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissions\">\n\n    <permission name=\"Browse\" />\n    <permission name=\"ReadProperties\">\n      <include>Browse</include>\n    </permission>\n    <permission name=\"ReadChildren\" />\n    <permission name=\"ReadLifeCycle\" />\n    <permission name=\"ReviewParticipant\" />\n    <permission name=\"ReadSecurity\" />\n\n    <permission name=\"WriteProperties\" />\n    <permission name=\"ReadVersion\"/>\n\n    <permission name=\"WriteVersion\" >\n       <include>WriteProperties</include>\n    </permission>\n\n    <permission name=\"Version\" >\n       <include>ReadVersion</include>\n       <include>WriteVersion</include>\n    </permission>\n\n    <permission name=\"Read\">\n      <include>Browse</include>\n      <include>ReadVersion</include>\n      <include>ReadProperties</include>\n      <include>ReadChildren</include>\n      <include>ReadLifeCycle</include>\n      <include>ReadSecurity</include>\n      <include>ReviewParticipant</include>\n    </permission>\n\n    <permission name=\"AddChildren\" />\n    <permission name=\"RemoveChildren\" />\n    <permission name=\"Remove\" />\n    <permission name=\"ManageWorkflows\" />\n    <permission name=\"WriteLifeCycle\" />\n    <permission name=\"Unlock\" />\n\n    <permission name=\"Remove\">\n      <documentation>\n        NXP-10929: necessary to follow the \"delete\" transition when Trash is enabled: include WriteLifeCycle\n      </documentation>\n      <include>RemoveChildren</include>\n      <include>WriteLifeCycle</include>\n    </permission>\n\n    <permission name=\"ReadRemove\">\n      <include>Read</include>\n      <include>Remove</include>\n    </permission>\n\n    <permission name=\"Write\">\n      <include>AddChildren</include>\n      <include>WriteProperties</include>\n      <include>Remove</include>\n      <include>ManageWorkflows</include>\n      <include>WriteLifeCycle</include>\n      <include>WriteVersion</include>\n    </permission>\n\n    <permission name=\"ReadWrite\">\n      <include>Read</include>\n      <include>Write</include>\n    </permission>\n\n    <permission name=\"WriteSecurity\" />\n\n    <permission name=\"Everything\">\n      <documentation>\n        Special permission given to administrators: god-level access\n      </documentation>\n    </permission>\n\n    <permission name=\"RestrictedRead\">\n      <documentation>\n        Deprecated - was used only for a single customer project before pluggable permission definitions\n      </documentation>\n    </permission>\n\n    <permission name=\"MakeRecord\" />\n    <permission name=\"SetRetention\" />\n    <permission name=\"ManageLegalHold\" />\n    <!-- Only for flexible records -->\n    <permission name=\"UnsetRetention\" />\n\n    <permission name=\"WriteColdStorage\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissionsVisibility\">\n\n    <visibility>\n      <item show=\"true\" order=\"10\">Read</item>\n      <item show=\"true\" order=\"50\" denyPermission=\"Write\">ReadWrite</item>\n      <item show=\"true\" order=\"100\">Everything</item>\n    </visibility>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/permissions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      The lock security policy checks if a lock is set on the document, in case\n      it denies write access to everyone except to the user who locked it.\n    \n",
              "documentationHtml": "<p>\nThe lock security policy checks if a lock is set on the document, in case\nit denies write access to everyone except to the user who locked it.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPolicies/Contributions/org.nuxeo.ecm.core.security.defaultPolicies--policies",
              "id": "org.nuxeo.ecm.core.security.defaultPolicies--policies",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <documentation>\n      The lock security policy checks if a lock is set on the document, in case\n      it denies write access to everyone except to the user who locked it.\n    </documentation>\n    <policy class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\" name=\"lock\" order=\"10\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPolicies",
          "name": "org.nuxeo.ecm.core.security.defaultPolicies",
          "requirements": [],
          "resolutionOrder": 94,
          "services": [],
          "startOrder": 165,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.security.defaultPolicies\">\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"policies\">\n\n    <documentation>\n      The lock security policy checks if a lock is set on the document, in case\n      it denies write access to everyone except to the user who locked it.\n    </documentation>\n    <policy name=\"lock\" class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\"\n      order=\"10\" />\n\n  </extension>\n\n  <!--\n  Policy disabled by default given that with auto-checkout\n  it looks like write access to checked in documents is allowed.\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"policies\">\n    <documentation>\n      The checkin security policy denies write access on a live document when\n      it is in the checked-in state. The document must be checked out before\n      modification is allowed.\n      @since 5.4\n    </documentation>\n    <policy name=\"checkin\" class=\"org.nuxeo.ecm.core.security.CheckInSecurityPolicy\"\n      order=\"15\" />\n  </extension>\n  -->\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/security-policy-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.migration.MigrationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.service.migrator/Contributions/org.nuxeo.ecm.core.trash.service.migrator--configuration",
              "id": "org.nuxeo.ecm.core.trash.service.migrator--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.migration.MigrationService",
                "name": "org.nuxeo.runtime.migration.MigrationService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.migration.MigrationService\">\n\n    <migration id=\"trash-storage\">\n      <description label=\"migration.trash-storage\">Migration of in the trash storage model</description>\n      <class>org.nuxeo.ecm.core.trash.TrashedStateMigrator</class>\n      <defaultState>property</defaultState>\n      <state id=\"lifecycle\">\n        <description label=\"migration.trash-storage.lifecycle\">Trashed state stored as deleted lifecycle state</description>\n      </state>\n      <state id=\"property\">\n        <description label=\"migration.trash-storage.property\">Trashed state stored as system property</description>\n      </state>\n\n      <step fromState=\"lifecycle\" id=\"lifecycle-to-property\" toState=\"property\">\n        <description label=\"migration.trash-storage.lifecycle-to-property\">Migrate trashed state from lifecycle to property</description>\n      </step>\n    </migration>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.service.migrator",
          "name": "org.nuxeo.ecm.core.trash.service.migrator",
          "requirements": [],
          "resolutionOrder": 95,
          "services": [],
          "startOrder": 180,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.trash.service.migrator\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.runtime.migration.MigrationService\" point=\"configuration\">\n\n    <migration id=\"trash-storage\">\n      <description label=\"migration.trash-storage\">Migration of in the trash storage model</description>\n      <class>org.nuxeo.ecm.core.trash.TrashedStateMigrator</class>\n      <defaultState>property</defaultState>\n      <state id=\"lifecycle\">\n        <description label=\"migration.trash-storage.lifecycle\">Trashed state stored as deleted lifecycle state</description>\n      </state>\n      <state id=\"property\">\n        <description label=\"migration.trash-storage.property\">Trashed state stored as system property</description>\n      </state>\n\n      <step id=\"lifecycle-to-property\" fromState=\"lifecycle\" toState=\"property\">\n        <description label=\"migration.trash-storage.lifecycle-to-property\">Migrate trashed state from lifecycle to property</description>\n      </step>\n    </migration>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/trash-migration.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.trash.TrashServiceImpl",
          "documentation": "\n    The trash service is responsible for deleting, purging and undeleting documents\n    based on the lifecycle state.\n  \n",
          "documentationHtml": "<p>\nThe trash service is responsible for deleting, purging and undeleting documents\nbased on the lifecycle state.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property defining the behavior when putting a checked in document in the trash.\n      When true, the document will be kept checked in (this avoids growing quotas).\n      When false, the document will be checked out (compatibility behavior).\n\n      @deprecated since 10.1 new trash service implementation doesn't allow to not keep checkedIn state. Property\n      configuration is still available for former trash service based on document life cycle state.\n    \n",
              "documentationHtml": "<p>\nProperty defining the behavior when putting a checked in document in the trash.\nWhen true, the document will be kept checked in (this avoids growing quotas).\nWhen false, the document will be checked out (compatibility behavior).\n</p><p>\n&#64;deprecated since 10.1 new trash service implementation doesn&#39;t allow to not keep checkedIn state. Property\nconfiguration is still available for former trash service based on document life cycle state.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService/Contributions/org.nuxeo.ecm.core.trash.TrashService--configuration",
              "id": "org.nuxeo.ecm.core.trash.TrashService--configuration",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property defining the behavior when putting a checked in document in the trash.\n      When true, the document will be kept checked in (this avoids growing quotas).\n      When false, the document will be checked out (compatibility behavior).\n\n      @deprecated since 10.1 new trash service implementation doesn't allow to not keep checkedIn state. Property\n      configuration is still available for former trash service based on document life cycle state.\n    </documentation>\n    <property name=\"org.nuxeo.trash.keepCheckedIn\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService",
          "name": "org.nuxeo.ecm.core.trash.TrashService",
          "requirements": [],
          "resolutionOrder": 96,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.trash.TrashService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService/Services/org.nuxeo.ecm.core.api.trash.TrashService",
              "id": "org.nuxeo.ecm.core.api.trash.TrashService",
              "overriden": false,
              "version": "2021.66.4"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.trash.TrashService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService/Services/org.nuxeo.ecm.core.trash.TrashService",
              "id": "org.nuxeo.ecm.core.trash.TrashService",
              "overriden": false,
              "version": "2021.66.4"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.trash.TrashService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService/Services/org.nuxeo.ecm.core.trash.TrashServiceImpl",
              "id": "org.nuxeo.ecm.core.trash.TrashServiceImpl",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 842,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.trash.TrashService\"\n           version=\"1.0\">\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.trash.TrashService\" />\n    <provide interface=\"org.nuxeo.ecm.core.trash.TrashService\" />\n    <provide interface=\"org.nuxeo.ecm.core.trash.TrashServiceImpl\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.trash.TrashServiceImpl\" />\n\n  <documentation>\n    The trash service is responsible for deleting, purging and undeleting documents\n    based on the lifecycle state.\n  </documentation>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property defining the behavior when putting a checked in document in the trash.\n      When true, the document will be kept checked in (this avoids growing quotas).\n      When false, the document will be checked out (compatibility behavior).\n\n      @deprecated since 10.1 new trash service implementation doesn't allow to not keep checkedIn state. Property\n      configuration is still available for former trash service based on document life cycle state.\n    </documentation>\n    <property name=\"org.nuxeo.trash.keepCheckedIn\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/trash-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.core.versioning.VersioningService"
          ],
          "componentClass": "org.nuxeo.ecm.core.versioning.VersioningComponent",
          "documentation": "\n    The versioning service hold the versioning policy used to define what\n    happens to a document's version when it is created, saved, checked in,\n    checked out or restored, and what version increment options (none, minor,\n    major) are made available to the user.\n\n    @Since 5.4\n  \n",
          "documentationHtml": "<p>\nThe versioning service hold the versioning policy used to define what\nhappens to a document&#39;s version when it is created, saved, checked in,\nchecked out or restored, and what version increment options (none, minor,\nmajor) are made available to the user.\n</p><p>\n&#64;Since 5.4\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.core.versioning.VersioningService--versioningService"
              ],
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "descriptors": [
                "org.nuxeo.ecm.core.versioning.VersioningServiceDescriptor"
              ],
              "documentation": "\n      Extension point defining the implementation of the versioning policy.\n      Example:\n\n      <code>\n    <service class=\"some-class\"/>\n</code>\n\n\n      The provided class must implement\n      org.nuxeo.ecm.core.api.versioning.VersioningService\n\n      The default implementation is\n      org.nuxeo.ecm.core.versioning.StandardVersioningService You can contribute\n      org.nuxeo.ecm.core.versioning.CompatVersioningService to get pre-Nuxeo 5.4\n      behavior.\n    \n",
              "documentationHtml": "<p>\nExtension point defining the implementation of the versioning policy.\nExample:\n</p><p>\n</p><pre><code>    &lt;service class&#61;&#34;some-class&#34;/&gt;\n</code></pre><p>\nThe provided class must implement\norg.nuxeo.ecm.core.api.versioning.VersioningService\n</p><p>\nThe default implementation is\norg.nuxeo.ecm.core.versioning.StandardVersioningService You can contribute\norg.nuxeo.ecm.core.versioning.CompatVersioningService to get pre-Nuxeo 5.4\nbehavior.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/ExtensionPoints/org.nuxeo.ecm.core.api.versioning.VersioningService--versioningService",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService--versioningService",
              "label": "versioningService (org.nuxeo.ecm.core.api.versioning.VersioningService)",
              "name": "versioningService",
              "version": "2021.66.4"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.core.versioning.VersioningService--versioningRules"
              ],
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "descriptors": [
                "org.nuxeo.ecm.core.versioning.VersioningRuleDescriptor",
                "org.nuxeo.ecm.core.versioning.DefaultVersioningRuleDescriptor"
              ],
              "documentation": "\n      CAUTION: Deprecated since 9.1, use policies, filters and restrictions extension points. Compatibility is provided,\n      contribution to this endpoint will be converted to new contributions in order to preserve the initial state and\n      options. The default contribution will be converted to a policy with an order equals to 10000, and each\n      versioningRule will have an order equals to 10000 - idx where idx is the index of rule in VersioningComponent.\n\n      Extension point defining default versioning rules or versioning rules by\n      document type. Contributions to this XP are available for\n      VersioningService implementing ExtendableVersioningService interface.\n\n      Example:\n\n      <code>\n    <defaultVersioningRule>\n        <initialState major=\"1\" minor=\"0\"/>\n        <options lifeCycleState=\"*\">\n            <none default=\"true\"/>\n            <minor/>\n            <major/>\n        </options>\n        <options lifeCycleState=\"approved\">\n            <none default=\"true\"/>\n            <minor/>\n        </options>\n    </defaultVersioningRule>\n    <versioningRule enabled=\"true\" typeName=\"File\">\n        <initialState major=\"1\" minor=\"1\"/>\n        <options lifeCycleState=\"project\">\n            <none/>\n            <minor default=\"true\"/>\n        </options>\n        <options lifeCycleState=\"approved\"/>\n    </versioningRule>\n</code>\n\n\n      The defaultVersioningRule will be used for all the document types if no\n      specific versioningRule is contributed.\n\n      typeName attribute is only available for versioningRule tag and should be\n      the name of a document type.\n\n      Initial state is the initial version number of the document. Default is\n      0.0 .\n\n      Options tag contains the different increment option available when saving\n      a document. Only none, minor and major tags are used. If the default\n      attribute isn't set, the first tag will be used as default. Options tag\n      should always have the lifeCycleState attribute. The life cycle state name\n      \"*\" can be used to match any state: it'll be used by default if no other\n      option with a matching state exists.\n\n      Following option gives no increment saving option when the current\n      lifeCycle of the document is approved.\n      <code>\n    <options lifeCycleState=\"approved\"/>\n</code>\n\n\n      Following options removes major increment option and set the minor\n      increment option as default choice.\n      <code>\n    <options lifeCycleState=\"project\">\n        <none/>\n        <minor default=\"true\"/>\n    </options>\n</code>\n\n\n      If no option is specified, the defaultVersioningRule is used. If there is\n      no defaultVersioningRule, we fall back on the service implementation.\n\n      @Since 5.4.2\n    \n",
              "documentationHtml": "<p>\nCAUTION: Deprecated since 9.1, use policies, filters and restrictions extension points. Compatibility is provided,\ncontribution to this endpoint will be converted to new contributions in order to preserve the initial state and\noptions. The default contribution will be converted to a policy with an order equals to 10000, and each\nversioningRule will have an order equals to 10000 - idx where idx is the index of rule in VersioningComponent.\n</p><p>\nExtension point defining default versioning rules or versioning rules by\ndocument type. Contributions to this XP are available for\nVersioningService implementing ExtendableVersioningService interface.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;defaultVersioningRule&gt;\n        &lt;initialState major&#61;&#34;1&#34; minor&#61;&#34;0&#34;/&gt;\n        &lt;options lifeCycleState&#61;&#34;*&#34;&gt;\n            &lt;none default&#61;&#34;true&#34;/&gt;\n            &lt;minor/&gt;\n            &lt;major/&gt;\n        &lt;/options&gt;\n        &lt;options lifeCycleState&#61;&#34;approved&#34;&gt;\n            &lt;none default&#61;&#34;true&#34;/&gt;\n            &lt;minor/&gt;\n        &lt;/options&gt;\n    &lt;/defaultVersioningRule&gt;\n    &lt;versioningRule enabled&#61;&#34;true&#34; typeName&#61;&#34;File&#34;&gt;\n        &lt;initialState major&#61;&#34;1&#34; minor&#61;&#34;1&#34;/&gt;\n        &lt;options lifeCycleState&#61;&#34;project&#34;&gt;\n            &lt;none/&gt;\n            &lt;minor default&#61;&#34;true&#34;/&gt;\n        &lt;/options&gt;\n        &lt;options lifeCycleState&#61;&#34;approved&#34;/&gt;\n    &lt;/versioningRule&gt;\n</code></pre><p>\nThe defaultVersioningRule will be used for all the document types if no\nspecific versioningRule is contributed.\n</p><p>\ntypeName attribute is only available for versioningRule tag and should be\nthe name of a document type.\n</p><p>\nInitial state is the initial version number of the document. Default is\n0.0 .\n</p><p>\nOptions tag contains the different increment option available when saving\na document. Only none, minor and major tags are used. If the default\nattribute isn&#39;t set, the first tag will be used as default. Options tag\nshould always have the lifeCycleState attribute. The life cycle state name\n&#34;*&#34; can be used to match any state: it&#39;ll be used by default if no other\noption with a matching state exists.\n</p><p>\nFollowing option gives no increment saving option when the current\nlifeCycle of the document is approved.\n</p><p></p><pre><code>    &lt;options lifeCycleState&#61;&#34;approved&#34;/&gt;\n</code></pre><p>\nFollowing options removes major increment option and set the minor\nincrement option as default choice.\n</p><p></p><pre><code>    &lt;options lifeCycleState&#61;&#34;project&#34;&gt;\n        &lt;none/&gt;\n        &lt;minor default&#61;&#34;true&#34;/&gt;\n    &lt;/options&gt;\n</code></pre><p>\nIf no option is specified, the defaultVersioningRule is used. If there is\nno defaultVersioningRule, we fall back on the service implementation.\n</p><p>\n&#64;Since 5.4.2\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/ExtensionPoints/org.nuxeo.ecm.core.api.versioning.VersioningService--versioningRules",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService--versioningRules",
              "label": "versioningRules (org.nuxeo.ecm.core.api.versioning.VersioningService)",
              "name": "versioningRules",
              "version": "2021.66.4"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.core.versioning.VersioningService--policies"
              ],
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "descriptors": [
                "org.nuxeo.ecm.core.versioning.VersioningPolicyDescriptor"
              ],
              "documentation": "\n      Extension point defining versioning policies for documents.\n      Contributions to this extension point are available for VersioningService\n      implementing ExtendableVersioningService interface.\n\n      Example:\n      <code>\n    <policy beforeUpdate=\"true\"\n        id=\"no-versioning-for-system-before-update\" increment=\"NONE\" order=\"1\">\n        <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-system-after-update\" increment=\"NONE\" order=\"1\">\n        <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"versioning-with-initial-version\" increment=\"MINOR\" order=\"2\">\n        <initialState major=\"1\" minor=\"0\"/>\n    </policy>\n</code>\n\n\n      The beforeUpdate attribute enables, if set to true,\n      to apply versioning before the actual update of the document.\n      The default value for this attribute is false.\n\n      The increment attribute defines which version number\n      (minor or major) have to be incremented.\n      The available options for this attribute are :\n        - NONE\n        - MINOR\n        - MAJOR\n\n      The order attribute defines in which order the policies\n      should be taken into account. They are taken in ascending order.\n\n      Initial state is the initial version number of the document.\n      Default is 0.0.\n\n      Each policy contains one or multiple filters\n      defining under which conditions the document should be versioned\n      (Note that filters for a policy are OR-ed).\n\n      @since 9.1\n    \n",
              "documentationHtml": "<p>\nExtension point defining versioning policies for documents.\nContributions to this extension point are available for VersioningService\nimplementing ExtendableVersioningService interface.\n</p><p>\nExample:\n</p><p></p><pre><code>    &lt;policy beforeUpdate&#61;&#34;true&#34;\n        id&#61;&#34;no-versioning-for-system-before-update&#34; increment&#61;&#34;NONE&#34; order&#61;&#34;1&#34;&gt;\n        &lt;filter-id&gt;system-document&lt;/filter-id&gt;\n    &lt;/policy&gt;\n    &lt;policy id&#61;&#34;no-versioning-for-system-after-update&#34; increment&#61;&#34;NONE&#34; order&#61;&#34;1&#34;&gt;\n        &lt;filter-id&gt;system-document&lt;/filter-id&gt;\n    &lt;/policy&gt;\n    &lt;policy id&#61;&#34;versioning-with-initial-version&#34; increment&#61;&#34;MINOR&#34; order&#61;&#34;2&#34;&gt;\n        &lt;initialState major&#61;&#34;1&#34; minor&#61;&#34;0&#34;/&gt;\n    &lt;/policy&gt;\n</code></pre><p>\nThe beforeUpdate attribute enables, if set to true,\nto apply versioning before the actual update of the document.\nThe default value for this attribute is false.\n</p><p>\nThe increment attribute defines which version number\n(minor or major) have to be incremented.\nThe available options for this attribute are :\n- NONE\n- MINOR\n- MAJOR\n</p><p>\nThe order attribute defines in which order the policies\nshould be taken into account. They are taken in ascending order.\n</p><p>\nInitial state is the initial version number of the document.\nDefault is 0.0.\n</p><p>\nEach policy contains one or multiple filters\ndefining under which conditions the document should be versioned\n(Note that filters for a policy are OR-ed).\n</p><p>\n&#64;since 9.1\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/ExtensionPoints/org.nuxeo.ecm.core.api.versioning.VersioningService--policies",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService--policies",
              "label": "policies (org.nuxeo.ecm.core.api.versioning.VersioningService)",
              "name": "policies",
              "version": "2021.66.4"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.core.versioning.VersioningService--filters"
              ],
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "descriptors": [
                "org.nuxeo.ecm.core.versioning.VersioningFilterDescriptor"
              ],
              "documentation": "\n      Extension point defining filters which can be used\n      by one or multiple versioning policies.\n      Contributions to this extension point are available for VersioningService\n      implementing ExtendableVersioningService interface.\n\n      Example :\n      <code>\n    <filter class=\"foo.bar.CustomVersioningFilter\" id=\"class-filter\"/>\n    <filter id=\"collaborative-filter-on-files\">\n        <type>File</type>\n        <condition>#{previousDocument.dc.lastContributor != currentDocument.dc.lastContributor}</condition>\n    </filter>\n    <filter id=\"empty\">\n        <type/>\n        <facet/>\n        <schema/>\n        <condition/>\n    </filter>\n</code>\n\n\n      A custom filter can be defined with the class attribute\n      if a java class should be used for the filter.\n      Otherwise, a StandardVersioningFilter will be used\n      with the following elements available:\n\n       - The type element defines which document type will be versioned.\n\n       - The facet/schema element defines that the document\n         will be versioned if it contains the facet/schema.\n\n       - The condition element enables creating\n         a custom condition with an EL expression.\n\n      Note that elements for a filter are AND-ed.\n\n      @since 9.1\n    \n",
              "documentationHtml": "<p>\nExtension point defining filters which can be used\nby one or multiple versioning policies.\nContributions to this extension point are available for VersioningService\nimplementing ExtendableVersioningService interface.\n</p><p>\nExample :\n</p><p></p><pre><code>    &lt;filter class&#61;&#34;foo.bar.CustomVersioningFilter&#34; id&#61;&#34;class-filter&#34;/&gt;\n    &lt;filter id&#61;&#34;collaborative-filter-on-files&#34;&gt;\n        &lt;type&gt;File&lt;/type&gt;\n        &lt;condition&gt;#{previousDocument.dc.lastContributor !&#61; currentDocument.dc.lastContributor}&lt;/condition&gt;\n    &lt;/filter&gt;\n    &lt;filter id&#61;&#34;empty&#34;&gt;\n        &lt;type/&gt;\n        &lt;facet/&gt;\n        &lt;schema/&gt;\n        &lt;condition/&gt;\n    &lt;/filter&gt;\n</code></pre><p>\nA custom filter can be defined with the class attribute\nif a java class should be used for the filter.\nOtherwise, a StandardVersioningFilter will be used\nwith the following elements available:\n</p><p>\n- The type element defines which document type will be versioned.\n</p><p>\n- The facet/schema element defines that the document\nwill be versioned if it contains the facet/schema.\n</p><p>\n- The condition element enables creating\na custom condition with an EL expression.\n</p><p>\nNote that elements for a filter are AND-ed.\n</p><p>\n&#64;since 9.1\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/ExtensionPoints/org.nuxeo.ecm.core.api.versioning.VersioningService--filters",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService--filters",
              "label": "filters (org.nuxeo.ecm.core.api.versioning.VersioningService)",
              "name": "filters",
              "version": "2021.66.4"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.core.versioning.VersioningService--restrictions"
              ],
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "descriptors": [
                "org.nuxeo.ecm.core.versioning.VersioningRestrictionDescriptor"
              ],
              "documentation": "\n      Extension point defining restrictions of versioning option by document type. Contributions to this XP are\n      available for VersioningService implementing ExtendableVersioningService interface.\n\n      Example:\n\n      <code>\n    <restriction type=\"File\">\n        <options lifeCycleState=\"project\">\n            <option>NONE</option>\n            <option default=\"true\">MINOR</option>\n        </options>\n        <options lifeCycleState=\"approved\"/>\n    </restriction>\n    <restriction type=\"*\">\n        <options lifeCycleState=\"*\">\n            <option default=\"true\">NONE</option>\n            <option>MINOR</option>\n            <option>MAJOR</option>\n        </options>\n        <options lifeCycleState=\"approved\">\n            <option default=\"true\">NONE</option>\n            <option>MINOR</option>\n        </options>\n    </restriction>\n</code>\n\n\n      \"type\" attribute is available for restriction tag and should be the name of a document type.\n\n      The restriction with type \"*\" will be used for all the document types if no specific restriction is contributed.\n\n      Options tag contains the different increment option available when saving a document. If the default attribute\n      isn't set, the first tag will be used as default. Options tag should always have the lifeCycleState attribute.\n      The life cycle state name \"*\" can be used to match any state: it'll be used by default if no other option with\n      a matching state exists.\n\n      Following option gives no increment saving option when the current life cycle of the document is approved.\n      <code>\n    <options lifeCycleState=\"approved\"/>\n</code>\n\n\n      Following options removes major increment option and set the minor increment option as default choice when the\n      current life cycle of the document is projet.\n      <code>\n    <options lifeCycleState=\"project\">\n        <none/>\n        <minor default=\"true\"/>\n    </options>\n</code>\n\n\n      If no restriction is specified, the restriction with \"*\" is used. If there is no default restriction, we fall\n      back on the service implementation (ie: none, minor and major options are available).\n\n      @since 9.1\n    \n",
              "documentationHtml": "<p>\nExtension point defining restrictions of versioning option by document type. Contributions to this XP are\navailable for VersioningService implementing ExtendableVersioningService interface.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;restriction type&#61;&#34;File&#34;&gt;\n        &lt;options lifeCycleState&#61;&#34;project&#34;&gt;\n            &lt;option&gt;NONE&lt;/option&gt;\n            &lt;option default&#61;&#34;true&#34;&gt;MINOR&lt;/option&gt;\n        &lt;/options&gt;\n        &lt;options lifeCycleState&#61;&#34;approved&#34;/&gt;\n    &lt;/restriction&gt;\n    &lt;restriction type&#61;&#34;*&#34;&gt;\n        &lt;options lifeCycleState&#61;&#34;*&#34;&gt;\n            &lt;option default&#61;&#34;true&#34;&gt;NONE&lt;/option&gt;\n            &lt;option&gt;MINOR&lt;/option&gt;\n            &lt;option&gt;MAJOR&lt;/option&gt;\n        &lt;/options&gt;\n        &lt;options lifeCycleState&#61;&#34;approved&#34;&gt;\n            &lt;option default&#61;&#34;true&#34;&gt;NONE&lt;/option&gt;\n            &lt;option&gt;MINOR&lt;/option&gt;\n        &lt;/options&gt;\n    &lt;/restriction&gt;\n</code></pre><p>\n&#34;type&#34; attribute is available for restriction tag and should be the name of a document type.\n</p><p>\nThe restriction with type &#34;*&#34; will be used for all the document types if no specific restriction is contributed.\n</p><p>\nOptions tag contains the different increment option available when saving a document. If the default attribute\nisn&#39;t set, the first tag will be used as default. Options tag should always have the lifeCycleState attribute.\nThe life cycle state name &#34;*&#34; can be used to match any state: it&#39;ll be used by default if no other option with\na matching state exists.\n</p><p>\nFollowing option gives no increment saving option when the current life cycle of the document is approved.\n</p><p></p><pre><code>    &lt;options lifeCycleState&#61;&#34;approved&#34;/&gt;\n</code></pre><p>\nFollowing options removes major increment option and set the minor increment option as default choice when the\ncurrent life cycle of the document is projet.\n</p><p></p><pre><code>    &lt;options lifeCycleState&#61;&#34;project&#34;&gt;\n        &lt;none/&gt;\n        &lt;minor default&#61;&#34;true&#34;/&gt;\n    &lt;/options&gt;\n</code></pre><p>\nIf no restriction is specified, the restriction with &#34;*&#34; is used. If there is no default restriction, we fall\nback on the service implementation (ie: none, minor and major options are available).\n</p><p>\n&#64;since 9.1\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/ExtensionPoints/org.nuxeo.ecm.core.api.versioning.VersioningService--restrictions",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService--restrictions",
              "label": "restrictions (org.nuxeo.ecm.core.api.versioning.VersioningService)",
              "name": "restrictions",
              "version": "2021.66.4"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService",
          "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
          "requirements": [],
          "resolutionOrder": 97,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/Services/org.nuxeo.ecm.core.api.versioning.VersioningService",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "overriden": false,
              "version": "2021.66.4"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/Services/org.nuxeo.ecm.core.versioning.VersioningService",
              "id": "org.nuxeo.ecm.core.versioning.VersioningService",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 818,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n  <alias>org.nuxeo.ecm.core.versioning.VersioningService</alias>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" />\n    <provide interface=\"org.nuxeo.ecm.core.versioning.VersioningService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.versioning.VersioningComponent\" />\n\n  <documentation>\n    The versioning service hold the versioning policy used to define what\n    happens to a document's version when it is created, saved, checked in,\n    checked out or restored, and what version increment options (none, minor,\n    major) are made available to the user.\n\n    @Since 5.4\n  </documentation>\n\n  <extension-point name=\"versioningService\">\n    <documentation>\n      Extension point defining the implementation of the versioning policy.\n      Example:\n\n      <code>\n        <service class=\"some-class\" />\n      </code>\n\n      The provided class must implement\n      org.nuxeo.ecm.core.api.versioning.VersioningService\n\n      The default implementation is\n      org.nuxeo.ecm.core.versioning.StandardVersioningService You can contribute\n      org.nuxeo.ecm.core.versioning.CompatVersioningService to get pre-Nuxeo 5.4\n      behavior.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.versioning.VersioningServiceDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"versioningRules\">\n    <documentation>\n      CAUTION: Deprecated since 9.1, use policies, filters and restrictions extension points. Compatibility is provided,\n      contribution to this endpoint will be converted to new contributions in order to preserve the initial state and\n      options. The default contribution will be converted to a policy with an order equals to 10000, and each\n      versioningRule will have an order equals to 10000 - idx where idx is the index of rule in VersioningComponent.\n\n      Extension point defining default versioning rules or versioning rules by\n      document type. Contributions to this XP are available for\n      VersioningService implementing ExtendableVersioningService interface.\n\n      Example:\n\n      <code>\n        <defaultVersioningRule>\n          <initialState major=\"1\" minor=\"0\" />\n          <options lifeCycleState=\"*\">\n            <none default=\"true\" />\n            <minor />\n            <major />\n          </options>\n          <options lifeCycleState=\"approved\">\n            <none default=\"true\" />\n            <minor />\n          </options>\n        </defaultVersioningRule>\n\n        <versioningRule typeName=\"File\" enabled=\"true\">\n          <initialState major=\"1\" minor=\"1\" />\n          <options lifeCycleState=\"project\">\n            <none />\n            <minor default=\"true\" />\n          </options>\n          <options lifeCycleState=\"approved\" />\n        </versioningRule>\n      </code>\n\n      The defaultVersioningRule will be used for all the document types if no\n      specific versioningRule is contributed.\n\n      typeName attribute is only available for versioningRule tag and should be\n      the name of a document type.\n\n      Initial state is the initial version number of the document. Default is\n      0.0 .\n\n      Options tag contains the different increment option available when saving\n      a document. Only none, minor and major tags are used. If the default\n      attribute isn't set, the first tag will be used as default. Options tag\n      should always have the lifeCycleState attribute. The life cycle state name\n      \"*\" can be used to match any state: it'll be used by default if no other\n      option with a matching state exists.\n\n      Following option gives no increment saving option when the current\n      lifeCycle of the document is approved.\n      <code>\n        <options lifeCycleState=\"approved\" />\n      </code>\n\n      Following options removes major increment option and set the minor\n      increment option as default choice.\n      <code>\n        <options lifeCycleState=\"project\">\n          <none />\n          <minor default=\"true\" />\n        </options>\n      </code>\n\n      If no option is specified, the defaultVersioningRule is used. If there is\n      no defaultVersioningRule, we fall back on the service implementation.\n\n      @Since 5.4.2\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.versioning.VersioningRuleDescriptor\" />\n    <object class=\"org.nuxeo.ecm.core.versioning.DefaultVersioningRuleDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"policies\">\n\n    <documentation>\n      Extension point defining versioning policies for documents.\n      Contributions to this extension point are available for VersioningService\n      implementing ExtendableVersioningService interface.\n\n      Example:\n      <code>\n        <policy id=\"no-versioning-for-system-before-update\" beforeUpdate=\"true\" increment=\"NONE\" order=\"1\">\n          <filter-id>system-document</filter-id>\n        </policy>\n        <policy id=\"no-versioning-for-system-after-update\" increment=\"NONE\" order=\"1\">\n          <filter-id>system-document</filter-id>\n        </policy>\n        <policy id=\"versioning-with-initial-version\" increment=\"MINOR\" order=\"2\">\n          <initialState major=\"1\" minor=\"0\" />\n        </policy>\n      </code>\n\n      The beforeUpdate attribute enables, if set to true,\n      to apply versioning before the actual update of the document.\n      The default value for this attribute is false.\n\n      The increment attribute defines which version number\n      (minor or major) have to be incremented.\n      The available options for this attribute are :\n        - NONE\n        - MINOR\n        - MAJOR\n\n      The order attribute defines in which order the policies\n      should be taken into account. They are taken in ascending order.\n\n      Initial state is the initial version number of the document.\n      Default is 0.0.\n\n      Each policy contains one or multiple filters\n      defining under which conditions the document should be versioned\n      (Note that filters for a policy are OR-ed).\n\n      @since 9.1\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.versioning.VersioningPolicyDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"filters\">\n\n    <documentation>\n      Extension point defining filters which can be used\n      by one or multiple versioning policies.\n      Contributions to this extension point are available for VersioningService\n      implementing ExtendableVersioningService interface.\n\n      Example :\n      <code>\n\n        <filter id=\"class-filter\" class=\"foo.bar.CustomVersioningFilter\"/>\n\n        <filter id=\"collaborative-filter-on-files\">\n          <type>File</type>\n          <condition>#{previousDocument.dc.lastContributor != currentDocument.dc.lastContributor}</condition>\n        </filter>\n\n        <filter id=\"empty\">\n          <type></type>\n          <facet></facet>\n          <schema></schema>\n          <condition></condition>\n        </filter>\n      </code>\n\n      A custom filter can be defined with the class attribute\n      if a java class should be used for the filter.\n      Otherwise, a StandardVersioningFilter will be used\n      with the following elements available:\n\n       - The type element defines which document type will be versioned.\n\n       - The facet/schema element defines that the document\n         will be versioned if it contains the facet/schema.\n\n       - The condition element enables creating\n         a custom condition with an EL expression.\n\n      Note that elements for a filter are AND-ed.\n\n      @since 9.1\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.versioning.VersioningFilterDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"restrictions\">\n    <documentation>\n      Extension point defining restrictions of versioning option by document type. Contributions to this XP are\n      available for VersioningService implementing ExtendableVersioningService interface.\n\n      Example:\n\n      <code>\n        <restriction type=\"File\">\n          <options lifeCycleState=\"project\">\n            <option>NONE</option>\n            <option default=\"true\">MINOR</option>\n          </options>\n          <options lifeCycleState=\"approved\" />\n        </restriction>\n\n        <restriction type=\"*\">\n          <options lifeCycleState=\"*\">\n            <option default=\"true\">NONE</option>\n            <option>MINOR</option>\n            <option>MAJOR</option>\n          </options>\n          <options lifeCycleState=\"approved\">\n            <option default=\"true\">NONE</option>\n            <option>MINOR</option>\n          </options>\n        </restriction>\n      </code>\n\n      \"type\" attribute is available for restriction tag and should be the name of a document type.\n\n      The restriction with type \"*\" will be used for all the document types if no specific restriction is contributed.\n\n      Options tag contains the different increment option available when saving a document. If the default attribute\n      isn't set, the first tag will be used as default. Options tag should always have the lifeCycleState attribute.\n      The life cycle state name \"*\" can be used to match any state: it'll be used by default if no other option with\n      a matching state exists.\n\n      Following option gives no increment saving option when the current life cycle of the document is approved.\n      <code>\n        <options lifeCycleState=\"approved\" />\n      </code>\n\n      Following options removes major increment option and set the minor increment option as default choice when the\n      current life cycle of the document is projet.\n      <code>\n        <options lifeCycleState=\"project\">\n          <none />\n          <minor default=\"true\" />\n        </options>\n      </code>\n\n      If no restriction is specified, the restriction with \"*\" is used. If there is no default restriction, we fall\n      back on the service implementation (ie: none, minor and major options are available).\n\n      @since 9.1\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.versioning.VersioningRestrictionDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/versioning-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Defines an adapter for documents having versioning\n      info. The adapter\n      interface is VersioningDocument and could be\n      retrieved in a standard way\n      from a document model with\n      getAdapter(VersioningDocument.class)\n    \n",
              "documentationHtml": "<p>\nDefines an adapter for documents having versioning\ninfo. The adapter\ninterface is VersioningDocument and could be\nretrieved in a standard way\nfrom a document model with\ngetAdapter(VersioningDocument.class)\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter/Contributions/org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter--adapters",
              "id": "org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter--adapters",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n\n    <documentation>\n      Defines an adapter for documents having versioning\n      info. The adapter\n      interface is VersioningDocument and could be\n      retrieved in a standard way\n      from a document model with\n      getAdapter(VersioningDocument.class)\n    </documentation>\n\n    <adapter class=\"org.nuxeo.ecm.core.api.facet.VersioningDocument\" factory=\"org.nuxeo.ecm.core.versioning.VersioningDocumentAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter",
          "name": "org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter",
          "requirements": [],
          "resolutionOrder": 98,
          "services": [],
          "startOrder": 182,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter\"\n  version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n\n    <documentation>\n      Defines an adapter for documents having versioning\n      info. The adapter\n      interface is VersioningDocument and could be\n      retrieved in a standard way\n      from a document model with\n      getAdapter(VersioningDocument.class)\n    </documentation>\n\n    <adapter class=\"org.nuxeo.ecm.core.api.facet.VersioningDocument\"\n      factory=\"org.nuxeo.ecm.core.versioning.VersioningDocumentAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/versioning-document-adapter.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration property (true or false) controlling whether ACLs on versions are disabled.\n      The value \"legacy\" is also possible, to disable for direct access but enable for queries.\n      @since 11.3\n    \n",
              "documentationHtml": "<p>\nConfiguration property (true or false) controlling whether ACLs on versions are disabled.\nThe value &#34;legacy&#34; is also possible, to disable for direct access but enable for queries.\n&#64;since 11.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.config/Contributions/org.nuxeo.ecm.core.versioning.config--configuration",
              "id": "org.nuxeo.ecm.core.versioning.config--configuration",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Configuration property (true or false) controlling whether ACLs on versions are disabled.\n      The value \"legacy\" is also possible, to disable for direct access but enable for queries.\n      @since 11.3\n    </documentation>\n    <property name=\"org.nuxeo.version.acl.disabled\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration property (true or false) controlling whether the ReadVersion permission is disabled.\n      @since 11.3\n    \n",
              "documentationHtml": "<p>\nConfiguration property (true or false) controlling whether the ReadVersion permission is disabled.\n&#64;since 11.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.config/Contributions/org.nuxeo.ecm.core.versioning.config--configuration1",
              "id": "org.nuxeo.ecm.core.versioning.config--configuration1",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Configuration property (true or false) controlling whether the ReadVersion permission is disabled.\n      @since 11.3\n    </documentation>\n    <property name=\"org.nuxeo.version.readversion.disabled\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.config",
          "name": "org.nuxeo.ecm.core.versioning.config",
          "requirements": [],
          "resolutionOrder": 99,
          "services": [],
          "startOrder": 183,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.versioning.config\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Configuration property (true or false) controlling whether ACLs on versions are disabled.\n      The value \"legacy\" is also possible, to disable for direct access but enable for queries.\n      @since 11.3\n    </documentation>\n    <property name=\"org.nuxeo.version.acl.disabled\">false</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Configuration property (true or false) controlling whether the ReadVersion permission is disabled.\n      @since 11.3\n    </documentation>\n    <property name=\"org.nuxeo.version.readversion.disabled\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/versioning-acl-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Deprecated since 2021.44 there is now an orphan versions incremental GC (StreamDocumentGC).\n      Listener used by DefaultVersionRemovalPolicy to remove the Orphan versions from repository in an async manner.\n    \n",
              "documentationHtml": "<p>\nDeprecated since 2021.44 there is now an orphan versions incremental GC (StreamDocumentGC).\nListener used by DefaultVersionRemovalPolicy to remove the Orphan versions from repository in an async manner.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.event.orphanVersionRemoval.listener/Contributions/org.nuxeo.ecm.core.event.orphanVersionRemoval.listener--listener",
              "id": "org.nuxeo.ecm.core.event.orphanVersionRemoval.listener--listener",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <documentation>\n      Deprecated since 2021.44 there is now an orphan versions incremental GC (StreamDocumentGC).\n      Listener used by DefaultVersionRemovalPolicy to remove the Orphan versions from repository in an async manner.\n    </documentation>\n    <listener async=\"true\" class=\"org.nuxeo.ecm.core.versioning.OrphanVersionRemoverListener\" enabled=\"false\" name=\"orphanVersionRemoverListener\" postCommit=\"true\">\n      <event>orphan_versions_to_remove</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.event.orphanVersionRemoval.listener",
          "name": "org.nuxeo.ecm.core.event.orphanVersionRemoval.listener",
          "requirements": [],
          "resolutionOrder": 100,
          "services": [],
          "startOrder": 141,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.event.orphanVersionRemoval.listener\"\n  version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <documentation>\n      Deprecated since 2021.44 there is now an orphan versions incremental GC (StreamDocumentGC).\n      Listener used by DefaultVersionRemovalPolicy to remove the Orphan versions from repository in an async manner.\n    </documentation>\n    <listener name=\"orphanVersionRemoverListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.core.versioning.OrphanVersionRemoverListener\" enabled=\"false\">\n      <event>orphan_versions_to_remove</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/orphanVersionRemoval-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "\n    Resolver for document properties containing DocumentModel reference. Can manage PATH reference or ID\n    reference. Value will contain id or path prefixed by the repository name to which the referenced document belongs.\n  \n",
          "documentationHtml": "<p>\nResolver for document properties containing DocumentModel reference. Can manage PATH reference or ID\nreference. Value will contain id or path prefixed by the repository name to which the referenced document belongs.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.ObjectResolverService--resolvers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.DocumentModel.resolver/Contributions/org.nuxeo.ecm.core.DocumentModel.resolver--resolvers",
              "id": "org.nuxeo.ecm.core.DocumentModel.resolver--resolvers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.ObjectResolverService",
                "name": "org.nuxeo.ecm.core.schema.ObjectResolverService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"resolvers\" target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\">\n    <resolver class=\"org.nuxeo.ecm.core.model.DocumentModelResolver\" type=\"documentResolver\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.DocumentModel.resolver",
          "name": "org.nuxeo.ecm.core.DocumentModel.resolver",
          "requirements": [],
          "resolutionOrder": 101,
          "services": [],
          "startOrder": 117,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.DocumentModel.resolver\">\n  <documentation>\n    Resolver for document properties containing DocumentModel reference. Can manage PATH reference or ID\n    reference. Value will contain id or path prefixed by the repository name to which the referenced document belongs.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\" point=\"resolvers\">\n    <resolver type=\"documentResolver\" class=\"org.nuxeo.ecm.core.model.DocumentModelResolver\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-resolver-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.filter.CharacterFilteringServiceImpl",
          "documentation": "\n    The character filtering service enables the filtering of unwanted characters.\n    If filtering is enabled, by default the control characters not valid in XML specification\n    will be removed from any field in document creation or update.\n  \n",
          "documentationHtml": "<p>\nThe character filtering service enables the filtering of unwanted characters.\nIf filtering is enabled, by default the control characters not valid in XML specification\nwill be removed from any field in document creation or update.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
              "descriptors": [
                "org.nuxeo.ecm.core.filter.CharacterFilteringServiceDescriptor"
              ],
              "documentation": "\n      Extension point to set if filtering is enabled or disabled. Other characters can\n      be added to be filtered if present.\n\n      <code>\n    <filtering enabled=\"true\">\n        <disallowedCharacters>\n            <character>\\r</character>\n            <character>\\t</character>\n        </disallowedCharacters>\n    </filtering>\n</code>\n",
              "documentationHtml": "<p>\nExtension point to set if filtering is enabled or disabled. Other characters can\nbe added to be filtered if present.\n</p><p>\n</p><pre><code>    &lt;filtering enabled&#61;&#34;true&#34;&gt;\n        &lt;disallowedCharacters&gt;\n            &lt;character&gt;\\r&lt;/character&gt;\n            &lt;character&gt;\\t&lt;/character&gt;\n        &lt;/disallowedCharacters&gt;\n    &lt;/filtering&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.filter.CharacterFilteringService/ExtensionPoints/org.nuxeo.ecm.core.filter.CharacterFilteringService--filtering",
              "id": "org.nuxeo.ecm.core.filter.CharacterFilteringService--filtering",
              "label": "filtering (org.nuxeo.ecm.core.filter.CharacterFilteringService)",
              "name": "filtering",
              "version": "2021.66.4"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.filter.CharacterFilteringService",
          "name": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
          "requirements": [],
          "resolutionOrder": 102,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.filter.CharacterFilteringService/Services/org.nuxeo.ecm.core.filter.CharacterFilteringService",
              "id": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 822,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.filter.CharacterFilteringService\">\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.filter.CharacterFilteringService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.filter.CharacterFilteringServiceImpl\" />\n\n  <documentation>\n    The character filtering service enables the filtering of unwanted characters.\n    If filtering is enabled, by default the control characters not valid in XML specification\n    will be removed from any field in document creation or update.\n  </documentation>\n\n  <extension-point name=\"filtering\">\n    <documentation>\n      Extension point to set if filtering is enabled or disabled. Other characters can\n      be added to be filtered if present.\n\n      <code>\n        <filtering enabled=\"true\">\n          <disallowedCharacters>\n            <character>\\r</character>\n            <character>\\t</character>\n          </disallowedCharacters>\n        </filtering>\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.filter.CharacterFilteringServiceDescriptor\" />\n\n  </extension-point>\n</component>\n",
          "xmlFileName": "/OSGI-INF/character-filtering-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.filter.CharacterFilteringService--filtering",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.document.characterFiltering.contrib/Contributions/org.nuxeo.ecm.core.document.characterFiltering.contrib--filtering",
              "id": "org.nuxeo.ecm.core.document.characterFiltering.contrib--filtering",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.filter.CharacterFilteringService",
                "name": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"filtering\" target=\"org.nuxeo.ecm.core.filter.CharacterFilteringService\">\n    <filtering enabled=\"true\">\n    </filtering>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.document.characterFiltering.contrib",
          "name": "org.nuxeo.ecm.core.document.characterFiltering.contrib",
          "requirements": [],
          "resolutionOrder": 103,
          "services": [],
          "startOrder": 139,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.document.characterFiltering.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.filter.CharacterFilteringService\" point=\"filtering\">\n    <filtering enabled=\"true\">\n    </filtering>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/character-filtering-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.blob.DocumentBlobManagerComponent",
          "documentation": "\n    Document Blob Manager, dispatching blobs and for methods associated to Documents or repositories.\n  \n",
          "documentationHtml": "<p>\nDocument Blob Manager, dispatching blobs and for methods associated to Documents or repositories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.blob.DocumentBlobManager",
              "descriptors": [
                "org.nuxeo.ecm.core.blob.BlobDispatcherDescriptor"
              ],
              "documentation": "\n      Extension points to register the blob dispatcher.\n    \n",
              "documentationHtml": "<p>\nExtension points to register the blob dispatcher.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.DocumentBlobManager/ExtensionPoints/org.nuxeo.ecm.core.blob.DocumentBlobManager--configuration",
              "id": "org.nuxeo.ecm.core.blob.DocumentBlobManager--configuration",
              "label": "configuration (org.nuxeo.ecm.core.blob.DocumentBlobManager)",
              "name": "configuration",
              "version": "2021.66.4"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.DocumentBlobManager",
          "name": "org.nuxeo.ecm.core.blob.DocumentBlobManager",
          "requirements": [],
          "resolutionOrder": 104,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.blob.DocumentBlobManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.DocumentBlobManager/Services/org.nuxeo.ecm.core.blob.DocumentBlobManager",
              "id": "org.nuxeo.ecm.core.blob.DocumentBlobManager",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 820,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.blob.DocumentBlobManager\" version=\"1.0.0\">\n\n  <documentation>\n    Document Blob Manager, dispatching blobs and for methods associated to Documents or repositories.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.blob.DocumentBlobManagerComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.blob.DocumentBlobManager\" />\n  </service>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Extension points to register the blob dispatcher.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.blob.BlobDispatcherDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/documentblobmanager-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.uidgen.service.UIDGeneratorService"
          ],
          "componentClass": "org.nuxeo.ecm.core.uidgen.UIDGeneratorComponent",
          "documentation": "\n    Component for a generator of unique ids, which can be used as metadata for documents or any other use.\n  \n",
          "documentationHtml": "<p>\nComponent for a generator of unique ids, which can be used as metadata for documents or any other use.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.platform.uidgen.service.UIDGeneratorService--sequencers"
              ],
              "componentId": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "descriptors": [
                "org.nuxeo.ecm.core.uidgen.UIDSequencerProviderDescriptor"
              ],
              "documentation": "\n      Allows to contribute a new uid sequencer.\n    \n",
              "documentationHtml": "<p>\nAllows to contribute a new uid sequencer.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/ExtensionPoints/org.nuxeo.ecm.core.uidgen.UIDGeneratorService--sequencers",
              "id": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService--sequencers",
              "label": "sequencers (org.nuxeo.ecm.core.uidgen.UIDGeneratorService)",
              "name": "sequencers",
              "version": "2021.66.4"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.platform.uidgen.service.UIDGeneratorService--generators"
              ],
              "componentId": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "descriptors": [
                "org.nuxeo.ecm.core.uidgen.UIDGeneratorDescriptor"
              ],
              "documentation": "\n      Allows to contribute a new uid generator.\n    \n",
              "documentationHtml": "<p>\nAllows to contribute a new uid generator.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/ExtensionPoints/org.nuxeo.ecm.core.uidgen.UIDGeneratorService--generators",
              "id": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService--generators",
              "label": "generators (org.nuxeo.ecm.core.uidgen.UIDGeneratorService)",
              "name": "generators",
              "version": "2021.66.4"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Listener to automatically generate uids for documents according to the registered uid generators.\n    \n",
              "documentationHtml": "<p>\nListener to automatically generate uids for documents according to the registered uid generators.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/Contributions/org.nuxeo.ecm.core.uidgen.UIDGeneratorService--listener",
              "id": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService--listener",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <documentation>\n      Listener to automatically generate uids for documents according to the registered uid generators.\n    </documentation>\n    <listener async=\"false\" class=\"org.nuxeo.ecm.core.uidgen.DocUIDGeneratorListener\" name=\"uidlistener\" postCommit=\"false\" priority=\"10\">\n      <event>documentCreated</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
          "name": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
          "requirements": [],
          "resolutionOrder": 105,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/Services/org.nuxeo.ecm.core.uidgen.UIDSequencer",
              "id": "org.nuxeo.ecm.core.uidgen.UIDSequencer",
              "overriden": false,
              "version": "2021.66.4"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/Services/org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "id": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 843,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorService\">\n\n  <alias>org.nuxeo.ecm.platform.uidgen.service.UIDGeneratorService</alias>\n\n  <documentation>\n    Component for a generator of unique ids, which can be used as metadata for documents or any other use.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.uidgen.UIDSequencer\" />\n    <provide interface=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorService\" />\n  </service>\n\n  <extension-point name=\"sequencers\">\n    <documentation>\n      Allows to contribute a new uid sequencer.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.uidgen.UIDSequencerProviderDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"generators\">\n    <documentation>\n      Allows to contribute a new uid generator.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <documentation>\n      Listener to automatically generate uids for documents according to the registered uid generators.\n    </documentation>\n    <listener name=\"uidlistener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.core.uidgen.DocUIDGeneratorListener\" priority=\"10\">\n      <event>documentCreated</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/uidgenerator-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property defining the name of the key/value store used for the KeyValueStoreUIDSequencer.\n    \n",
              "documentationHtml": "<p>\nProperty defining the name of the key/value store used for the KeyValueStoreUIDSequencer.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidseq.keyvaluestore/Contributions/org.nuxeo.ecm.core.uidseq.keyvaluestore--configuration",
              "id": "org.nuxeo.ecm.core.uidseq.keyvaluestore--configuration",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property defining the name of the key/value store used for the KeyValueStoreUIDSequencer.\n    </documentation>\n    <property name=\"nuxeo.uidseq.keyvaluestore.name\">sequence</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidseq.keyvaluestore",
          "name": "org.nuxeo.ecm.core.uidseq.keyvaluestore",
          "requirements": [],
          "resolutionOrder": 106,
          "services": [],
          "startOrder": 181,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.uidseq.keyvaluestore\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property defining the name of the key/value store used for the KeyValueStoreUIDSequencer.\n    </documentation>\n    <property name=\"nuxeo.uidseq.keyvaluestore.name\">sequence</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/uidgenerator-keyvalue-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.CoreSessionServiceImpl",
          "documentation": "\n    Service managing the acquisition/release of CoreSession instances.\n  \n",
          "documentationHtml": "<p>\nService managing the acquisition/release of CoreSession instances.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.CoreSessionServiceImpl",
          "name": "org.nuxeo.ecm.core.api.CoreSessionServiceImpl",
          "requirements": [],
          "resolutionOrder": 107,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.CoreSessionServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.CoreSessionServiceImpl/Services/org.nuxeo.ecm.core.api.CoreSessionService",
              "id": "org.nuxeo.ecm.core.api.CoreSessionService",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 810,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.api.CoreSessionServiceImpl\" version=\"1.0.0\">\n\n  <documentation>\n    Service managing the acquisition/release of CoreSession instances.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.api.CoreSessionServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.CoreSessionService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/CoreSessionService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.schedulers/Contributions/org.nuxeo.ecm.core.schedulers--schedule",
              "id": "org.nuxeo.ecm.core.schedulers--schedule",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "name": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\">\n\n    <schedule id=\"aceScheduler\">\n      <eventId>updateACEStatus</eventId>\n      <!-- every 5 mins -->\n      <cronExpression>0 0/5 * * * ?</cronExpression>\n    </schedule>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.schedulers/Contributions/org.nuxeo.ecm.core.schedulers--listener",
              "id": "org.nuxeo.ecm.core.schedulers--listener",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.core.security.UpdateACEStatusListener\" name=\"updateACEStatus\">\n      <event>updateACEStatus</event>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.schedulers/Contributions/org.nuxeo.ecm.core.schedulers--queues",
              "id": "org.nuxeo.ecm.core.schedulers--queues",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"updateACEStatus\">\n      <maxThreads>1</maxThreads>\n      <category>updateACEStatus</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.schedulers",
          "name": "org.nuxeo.ecm.core.schedulers",
          "requirements": [],
          "resolutionOrder": 108,
          "services": [],
          "startOrder": 160,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.schedulers\">\n\n  <extension target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\"\n    point=\"schedule\">\n\n    <schedule id=\"aceScheduler\">\n      <eventId>updateACEStatus</eventId>\n      <!-- every 5 mins -->\n      <cronExpression>0 0/5 * * * ?</cronExpression>\n    </schedule>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"updateACEStatus\" async=\"true\" class=\"org.nuxeo.ecm.core.security.UpdateACEStatusListener\">\n      <event>updateACEStatus</event>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"updateACEStatus\">\n      <maxThreads>1</maxThreads>\n      <category>updateACEStatus</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/scheduler-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      The retention and hold security policy prevents deletion of a document\n      when it is under retention or has a legal hold.\n    \n",
              "documentationHtml": "<p>\nThe retention and hold security policy prevents deletion of a document\nwhen it is under retention or has a legal hold.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib/Contributions/org.nuxeo.ecm.core.retention.contrib--policies",
              "id": "org.nuxeo.ecm.core.retention.contrib--policies",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n    <documentation>\n      The retention and hold security policy prevents deletion of a document\n      when it is under retention or has a legal hold.\n    </documentation>\n    <policy class=\"org.nuxeo.ecm.core.security.RetentionAndHoldSecurityPolicy\" name=\"retentionAndHold\" order=\"1\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib/Contributions/org.nuxeo.ecm.core.retention.contrib--listener",
              "id": "org.nuxeo.ecm.core.retention.contrib--listener",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.core.security.RetentionExpiredFinderListener\" name=\"findRetentionExpired\">\n      <event>findRetentionExpired</event>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib/Contributions/org.nuxeo.ecm.core.retention.contrib--actions",
              "id": "org.nuxeo.ecm.core.retention.contrib--actions",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <!-- NOT httpEnabled -->\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"retention/retentionExpired\" name=\"retentionExpired\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib/Contributions/org.nuxeo.ecm.core.retention.contrib--streamProcessor",
              "id": "org.nuxeo.ecm.core.retention.contrib--streamProcessor",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.security.RetentionExpiredAction\" defaultConcurrency=\"1\" defaultPartitions=\"1\" name=\"retentionExpired\">\n      <!-- continue on failure, because failure to expire retention doesn't give us an inconsistent state -->\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"60s\" maxRetries=\"20\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib",
          "name": "org.nuxeo.ecm.core.retention.contrib",
          "requirements": [],
          "resolutionOrder": 109,
          "services": [],
          "startOrder": 159,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.retention.contrib\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\" point=\"policies\">\n    <documentation>\n      The retention and hold security policy prevents deletion of a document\n      when it is under retention or has a legal hold.\n    </documentation>\n    <policy name=\"retentionAndHold\" class=\"org.nuxeo.ecm.core.security.RetentionAndHoldSecurityPolicy\"\n      order=\"1\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"findRetentionExpired\" async=\"true\"\n      class=\"org.nuxeo.ecm.core.security.RetentionExpiredFinderListener\">\n      <event>findRetentionExpired</event>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <!-- NOT httpEnabled -->\n    <action name=\"retentionExpired\" inputStream=\"retention/retentionExpired\" bucketSize=\"100\" batchSize=\"25\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"retentionExpired\" class=\"org.nuxeo.ecm.core.security.RetentionExpiredAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.retentionExpired.defaultConcurrency:=1}\"\n      defaultPartitions=\"${nuxeo.bulk.action.retentionExpired.defaultPartitions:=1}\">\n      <!-- continue on failure, because failure to expire retention doesn't give us an inconsistent state -->\n      <policy name=\"default\" maxRetries=\"20\" delay=\"1s\" maxDelay=\"60s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-and-hold-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.EventService--listeners",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener/Contributions/org.nuxeo.ecm.core.blob.asyncdigest.listener--listeners",
              "id": "org.nuxeo.ecm.core.blob.asyncdigest.listener--listeners",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"listeners\" target=\"org.nuxeo.runtime.EventService\">\n    <listener class=\"org.nuxeo.ecm.core.blob.AsyncDigestListener\">\n      <topic>asyncDigest</topic>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener/Contributions/org.nuxeo.ecm.core.blob.asyncdigest.listener--queues",
              "id": "org.nuxeo.ecm.core.blob.asyncdigest.listener--queues",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"computeDigest\">\n      <maxThreads>2</maxThreads>\n      <category>computeDigest</category>\n    </queue>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scheduler.SchedulerService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener/Contributions/org.nuxeo.ecm.core.blob.asyncdigest.listener--schedule",
              "id": "org.nuxeo.ecm.core.blob.asyncdigest.listener--schedule",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scheduler.SchedulerService",
                "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\">\n    <schedule id=\"blobManagerDeleteMarkedBlobsSchedule\">\n      <event>blobManagerDeleteMarkedBlobsEvent</event>\n      <!-- every 15 minutes -->\n      <cronExpression>0 0/15 * * * ?</cronExpression>\n    </schedule>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener/Contributions/org.nuxeo.ecm.core.blob.asyncdigest.listener--listener",
              "id": "org.nuxeo.ecm.core.blob.asyncdigest.listener--listener",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.core.blob.BlobDeleteListener\" name=\"blobManagerDeleteMarkedBlobsListener\" postCommit=\"true\">\n      <event>blobManagerDeleteMarkedBlobsEvent</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener",
          "name": "org.nuxeo.ecm.core.blob.asyncdigest.listener",
          "requirements": [],
          "resolutionOrder": 110,
          "services": [],
          "startOrder": 131,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.blob.asyncdigest.listener\">\n\n  <extension target=\"org.nuxeo.runtime.EventService\" point=\"listeners\">\n    <listener class=\"org.nuxeo.ecm.core.blob.AsyncDigestListener\">\n      <topic>asyncDigest</topic>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"computeDigest\">\n      <maxThreads>2</maxThreads>\n      <category>computeDigest</category>\n    </queue>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\" point=\"schedule\">\n    <schedule id=\"blobManagerDeleteMarkedBlobsSchedule\">\n      <event>blobManagerDeleteMarkedBlobsEvent</event>\n      <!-- every 15 minutes -->\n      <cronExpression>0 0/15 * * * ?</cronExpression>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"blobManagerDeleteMarkedBlobsListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.core.blob.BlobDeleteListener\">\n      <event>blobManagerDeleteMarkedBlobsEvent</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/asyncdigest-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property defining the restricted aspect when creating a (live) proxy.\n\n      @since 2021.17\n    \n",
              "documentationHtml": "<p>\nProperty defining the restricted aspect when creating a (live) proxy.\n</p><p>\n&#64;since 2021.17\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.proxy.creation.restricted.configuration/Contributions/org.nuxeo.ecm.core.proxy.creation.restricted.configuration--configuration",
              "id": "org.nuxeo.ecm.core.proxy.creation.restricted.configuration--configuration",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property defining the restricted aspect when creating a (live) proxy.\n\n      @since 2021.17\n    </documentation>\n    <property name=\"org.nuxeo.proxy.creation.restricted\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.proxy.creation.restricted.configuration",
          "name": "org.nuxeo.ecm.core.proxy.creation.restricted.configuration",
          "requirements": [],
          "resolutionOrder": 111,
          "services": [],
          "startOrder": 157,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.proxy.creation.restricted.configuration\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property defining the restricted aspect when creating a (live) proxy.\n\n      @since 2021.17\n    </documentation>\n    <property name=\"org.nuxeo.proxy.creation.restricted\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/proxy-creation-configuration-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.migration.bulk/Contributions/org.nuxeo.ecm.core.migration.bulk--actions",
              "id": "org.nuxeo.ecm.core.migration.bulk--actions",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"bulk/migration\" name=\"migration\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.migration.bulk/Contributions/org.nuxeo.ecm.core.migration.bulk--streamProcessor",
              "id": "org.nuxeo.ecm.core.migration.bulk--streamProcessor",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <!-- Migration processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.migrator.AbstractBulkMigrator$MigrationAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"migration\" start=\"false\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.migration.bulk",
          "name": "org.nuxeo.ecm.core.migration.bulk",
          "requirements": [],
          "resolutionOrder": 112,
          "services": [],
          "startOrder": 149,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.migration.bulk\">\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"migration\" inputStream=\"bulk/migration\" bucketSize=\"100\" batchSize=\"25\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <!-- Migration processor -->\n    <streamProcessor name=\"migration\" class=\"org.nuxeo.ecm.core.migrator.AbstractBulkMigrator$MigrationAction\"\n                     defaultConcurrency=\"${nuxeo.bulk.action.migration.defaultConcurrency:=2}\"\n                     defaultPartitions=\"${nuxeo.bulk.action.migration.defaultPartitions:=4}\" start=\"false\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\"/>\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-migration-action-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.scroll.contrib/Contributions/org.nuxeo.ecm.core.scroll.contrib--scroll",
              "id": "org.nuxeo.ecm.core.scroll.contrib--scroll",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.ecm.core.blob.scroll.RepositoryBlobScroll\" name=\"repositoryBlobScroll\" type=\"generic\"/>\n    <scroll class=\"org.nuxeo.ecm.core.blob.scroll.InMemoryBlobScroll\" name=\"inMemoryBlobScroll\" type=\"generic\"/>\n    <scroll class=\"org.nuxeo.ecm.core.blob.scroll.LocalBlobScroll\" name=\"localBlobScroll\" type=\"generic\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.scroll.contrib",
          "name": "org.nuxeo.ecm.core.scroll.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.scroll.service"
          ],
          "resolutionOrder": 130,
          "services": [],
          "startOrder": 161,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.scroll.contrib\" version=\"1.0\">\n  <require>org.nuxeo.ecm.core.scroll.service</require>\n  <extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll type=\"generic\" name=\"repositoryBlobScroll\" class=\"org.nuxeo.ecm.core.blob.scroll.RepositoryBlobScroll\" />\n    <scroll type=\"generic\" name=\"inMemoryBlobScroll\" class=\"org.nuxeo.ecm.core.blob.scroll.InMemoryBlobScroll\" />\n    <scroll type=\"generic\" name=\"localBlobScroll\" class=\"org.nuxeo.ecm.core.blob.scroll.LocalBlobScroll\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/scroll-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--domainEventProducer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.stream.blobs/Contributions/org.nuxeo.ecm.core.stream.blobs--domainEventProducer",
              "id": "org.nuxeo.ecm.core.stream.blobs--domainEventProducer",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"domainEventProducer\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <domainEventProducer class=\"org.nuxeo.ecm.core.blob.stream.BlobDomainEventProducer\" name=\"blobDomain\">\n      <stream codec=\"avro\" name=\"source/blob\" partitions=\"1\"/>\n    </domainEventProducer>\n    <domainEventProducer class=\"org.nuxeo.ecm.core.model.stream.DocumentDomainEventProducer\" name=\"documentDomain\">\n      <stream codec=\"avro\" name=\"source/document\" partitions=\"1\"/>\n    </domainEventProducer>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.stream.blobs/Contributions/org.nuxeo.ecm.core.stream.blobs--streamProcessor",
              "id": "org.nuxeo.ecm.core.stream.blobs--streamProcessor",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.blob.stream.StreamOrphanBlobGC\" defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultPartitions=\"1\" enabled=\"true\" name=\"blobGC\">\n      <policy continueOnFailure=\"true\" delay=\"3s\" maxDelay=\"60s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.ecm.core.model.stream.StreamDocumentGC\" defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultPartitions=\"1\" enabled=\"true\" name=\"documentGC\">\n      <policy continueOnFailure=\"true\" delay=\"3s\" maxDelay=\"60s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.stream.blobs",
          "name": "org.nuxeo.ecm.core.stream.blobs",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 133,
          "services": [],
          "startOrder": 178,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.stream.blobs\">\n\n  <require>org.nuxeo.ecm.core.bulk</require>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"domainEventProducer\">\n    <domainEventProducer name=\"blobDomain\" class=\"org.nuxeo.ecm.core.blob.stream.BlobDomainEventProducer\">\n      <stream name=\"source/blob\" partitions=\"${nuxeo.bulk.action.blobGC.defaultPartitions:=1}\" codec=\"avro\" />\n    </domainEventProducer>\n    <domainEventProducer name=\"documentDomain\" class=\"org.nuxeo.ecm.core.model.stream.DocumentDomainEventProducer\">\n      <stream name=\"source/document\" partitions=\"${nuxeo.bulk.action.documentGC.defaultPartitions:=1}\" codec=\"avro\" />\n    </domainEventProducer>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"blobGC\"\n      defaultCodec=\"avro\" class=\"org.nuxeo.ecm.core.blob.stream.StreamOrphanBlobGC\"\n      defaultConcurrency=\"${nuxeo.bulk.action.blobGC.defaultConcurrency:=1}\"\n      defaultPartitions=\"${nuxeo.bulk.action.blobGC.defaultPartitions:=1}\"\n      enabled=\"${nuxeo.bulk.action.blobGC.enabled:=true}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"3s\" maxDelay=\"60s\"\n        continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"documentGC\"\n      defaultCodec=\"avro\" class=\"org.nuxeo.ecm.core.model.stream.StreamDocumentGC\"\n      defaultConcurrency=\"${nuxeo.bulk.action.documentGC.defaultConcurrency:=1}\"\n      defaultPartitions=\"${nuxeo.bulk.action.documentGC.defaultPartitions:=1}\"\n      enabled=\"${nuxeo.bulk.action.documentGC.enabled:=true}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"3s\" maxDelay=\"60s\"\n        continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-domain-event-producer-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.deletion.config/Contributions/org.nuxeo.ecm.core.deletion.config--actions",
              "id": "org.nuxeo.ecm.core.deletion.config--actions",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"50\" bucketSize=\"100\" inputStream=\"bulk/deletion\" name=\"deletion\"/>\n    <action batchSize=\"50\" bucketSize=\"500\" inputStream=\"bulk/garbageCollectOrphanBlobs\" name=\"garbageCollectOrphanBlobs\" sequentialScroll=\"true\" validationClass=\"org.nuxeo.ecm.core.action.validation.GarbageCollectOrphanBlobsValidation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.deletion.config/Contributions/org.nuxeo.ecm.core.deletion.config--streamProcessor",
              "id": "org.nuxeo.ecm.core.deletion.config--streamProcessor",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.action.DeletionAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"deletion\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <!-- GarbageCollectOrphanBlobs processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.action.GarbageCollectOrphanBlobsAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"garbageCollectOrphanBlobs\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.deletion.config",
          "name": "org.nuxeo.ecm.core.deletion.config",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 134,
          "services": [],
          "startOrder": 138,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.deletion.config\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.bulk</require>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"deletion\" inputStream=\"bulk/deletion\" bucketSize=\"100\" batchSize=\"50\" />\n    <action name=\"garbageCollectOrphanBlobs\"\n      validationClass=\"org.nuxeo.ecm.core.action.validation.GarbageCollectOrphanBlobsValidation\"\n      inputStream=\"bulk/garbageCollectOrphanBlobs\" bucketSize=\"500\"\n      batchSize=\"50\" sequentialScroll=\"true\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"deletion\" class=\"org.nuxeo.ecm.core.action.DeletionAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.deletion.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.deletion.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\"/>\n    </streamProcessor>\n    <!-- GarbageCollectOrphanBlobs processor -->\n    <streamProcessor name=\"garbageCollectOrphanBlobs\"\n      class=\"org.nuxeo.ecm.core.action.GarbageCollectOrphanBlobsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.garbageCollectOrphanBlobs.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.garbageCollectOrphanBlobs.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/deletion-action-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.orphanVersionsCleanup/Contributions/org.nuxeo.ecm.core.orphanVersionsCleanup--actions",
              "id": "org.nuxeo.ecm.core.orphanVersionsCleanup--actions",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"bulk/garbageCollectOrphanVersions\" name=\"garbageCollectOrphanVersions\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.orphanVersionsCleanup/Contributions/org.nuxeo.ecm.core.orphanVersionsCleanup--streamProcessor",
              "id": "org.nuxeo.ecm.core.orphanVersionsCleanup--streamProcessor",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.action.GarbageCollectOrphanVersionsAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"garbageCollectOrphanVersions\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.orphanVersionsCleanup",
          "name": "org.nuxeo.ecm.core.orphanVersionsCleanup",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 135,
          "services": [],
          "startOrder": 156,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.orphanVersionsCleanup\">\n\n  <require>org.nuxeo.ecm.core.bulk</require>\n\n  <!-- deprecated legacy orphan version cleaner\n  <extension target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\" point=\"schedule\">\n    <schedule id=\"orphanVersionsCleanup\">\n      <cronExpression>0 30 1 * * ?</cronExpression>\n      <event>orphanVersionsCleanup</event>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"orphanVersionsCleanup\" async=\"true\" postCommit=\"true\" enabled=\"false\"\n      class=\"org.nuxeo.ecm.core.versioning.OrphanVersionCleanupListener\">\n      <event>orphanVersionsCleanup</event>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Configuration property for the maximum number of orphan versions to delete in one transaction.\n      This is only meaningful if the OrphanVersionCleanupListener is active.\n      @deprecated since 2023, the Bulk GarbageCollectOrphanVersionsAction is now the preferred way to clean up orphan\n      versions.\n    </documentation>\n    <property name=\"org.nuxeo.orphanVersionsCleanup.commitSize\">1000</property>\n  </extension>\n  -->\n\n  <!-- bulk action implementing the new orphan versions full GC -->\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"garbageCollectOrphanVersions\" inputStream=\"bulk/garbageCollectOrphanVersions\" bucketSize=\"100\"\n      batchSize=\"25\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"garbageCollectOrphanVersions\"\n      class=\"org.nuxeo.ecm.core.action.GarbageCollectOrphanVersionsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.garbageCollectOrphanVersions.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.garbageCollectOrphanVersions.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/orphanVersionsCleanup-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.default-policies/Contributions/org.nuxeo.ecm.core.versioning.default-policies--policies",
              "id": "org.nuxeo.ecm.core.versioning.default-policies--policies",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <policy beforeUpdate=\"true\" id=\"no-versioning-for-system-before-update\" increment=\"NONE\" order=\"1\">\n      <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-system-after-update\" increment=\"NONE\" order=\"1\">\n      <filter-id>system-document</filter-id>\n    </policy>\n    <policy beforeUpdate=\"true\" id=\"disable-versioning-before-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>disable-versioning</filter-id>\n    </policy>\n    <policy id=\"disable-versioning-after-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>disable-versioning</filter-id>\n    </policy>\n    <policy id=\"note-as-wiki\" increment=\"MINOR\" order=\"50\">\n      <filter-id>note-filter</filter-id>\n    </policy>\n    <policy beforeUpdate=\"true\" id=\"collaborative-save\" increment=\"MINOR\" order=\"100\">\n      <filter-id>last-contributor-different-filter</filter-id>\n    </policy>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.default-policies/Contributions/org.nuxeo.ecm.core.versioning.default-policies--filters",
              "id": "org.nuxeo.ecm.core.versioning.default-policies--filters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2021.66.4",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <filter class=\"org.nuxeo.ecm.core.versioning.NoVersioningPolicyFilter\" id=\"system-document\"/>\n    <filter id=\"disable-versioning\">\n      <condition>#{currentDocument.contextData.DisableAutomaticVersioning}</condition>\n    </filter>\n    <filter id=\"note-filter\">\n      <type>Note</type>\n    </filter>\n    <filter id=\"last-contributor-different-filter\">\n      <schema>file</schema>\n      <condition>#{previousDocument.dc.lastContributor != currentDocument.dc.lastContributor}</condition>\n    </filter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.default-policies",
          "name": "org.nuxeo.ecm.core.versioning.default-policies",
          "requirements": [
            "org.nuxeo.ecm.platform.el.service"
          ],
          "resolutionOrder": 143,
          "services": [],
          "startOrder": 184,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.versioning.default-policies\" version=\"1.0\">\n\n  <require>org.nuxeo.ecm.platform.el.service</require>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"policies\">\n    <policy id=\"no-versioning-for-system-before-update\" beforeUpdate=\"true\" increment=\"NONE\" order=\"1\">\n      <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-system-after-update\" increment=\"NONE\" order=\"1\">\n      <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"disable-versioning-before-update\" beforeUpdate=\"true\" increment=\"NONE\" order=\"2\">\n      <filter-id>disable-versioning</filter-id>\n    </policy>\n    <policy id=\"disable-versioning-after-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>disable-versioning</filter-id>\n    </policy>\n    <policy id=\"note-as-wiki\" increment=\"MINOR\" order=\"50\">\n      <filter-id>note-filter</filter-id>\n    </policy>\n    <policy id=\"collaborative-save\" increment=\"MINOR\" beforeUpdate=\"true\" order=\"100\">\n      <filter-id>last-contributor-different-filter</filter-id>\n    </policy>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"filters\">\n    <filter id=\"system-document\" class=\"org.nuxeo.ecm.core.versioning.NoVersioningPolicyFilter\" />\n    <filter id=\"disable-versioning\">\n      <condition>#{currentDocument.contextData.DisableAutomaticVersioning}</condition>\n    </filter>\n    <filter id=\"note-filter\">\n      <type>Note</type>\n    </filter>\n    <filter id=\"last-contributor-different-filter\">\n      <schema>file</schema>\n      <condition>#{previousDocument.dc.lastContributor != currentDocument.dc.lastContributor}</condition>\n    </filter>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/versioning-default-policies.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.repository.RepositoryService",
          "declaredStartOrder": 100,
          "documentation": "\n    Service to manage core repositories.\n  \n",
          "documentationHtml": "<p>\nService to manage core repositories.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.repository.RepositoryServiceComponent",
          "name": "org.nuxeo.ecm.core.repository.RepositoryServiceComponent",
          "requirements": [
            "org.nuxeo.runtime.cluster.ClusterService",
            "org.nuxeo.ecm.core.api.repository.RepositoryManager"
          ],
          "resolutionOrder": 795,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.repository.RepositoryServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.repository.RepositoryServiceComponent/Services/org.nuxeo.ecm.core.repository.RepositoryService",
              "id": "org.nuxeo.ecm.core.repository.RepositoryService",
              "overriden": false,
              "version": "2021.66.4"
            }
          ],
          "startOrder": 789,
          "version": "2021.66.4",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.repository.RepositoryServiceComponent\"\n  version=\"1.0\">\n  <documentation>\n    Service to manage core repositories.\n  </documentation>\n\n  <require>org.nuxeo.ecm.core.api.repository.RepositoryManager</require>\n  <require>org.nuxeo.runtime.cluster.ClusterService</require>\n\n  <implementation class=\"org.nuxeo.ecm.core.repository.RepositoryService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.repository.RepositoryService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/RepositoryService.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-2021.66.4.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core",
      "id": "org.nuxeo.ecm.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 11.0.25\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.ecm.core,org.nuxeo.ecm.core.api,org.nuxeo.ec\r\n m.core.api.local,org.nuxeo.ecm.core.lifecycle,org.nuxeo.ecm.core.life\r\n cycle.event,org.nuxeo.ecm.core.lifecycle.extensions,org.nuxeo.ecm.cor\r\n e.lifecycle.impl,org.nuxeo.ecm.core.model,org.nuxeo.ecm.core.reposito\r\n ry,org.nuxeo.ecm.core.security,org.nuxeo.ecm.core.trash,org.nuxeo.ecm\r\n .core.versioning\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core\r\nBundle-Name: org.nuxeo.ecm.core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.core.api;visibility:=reexport,org.nuxeo.\r\n ecm.core.event\r\nNuxeo-Component: OSGI-INF/CoreService.xml, OSGI-INF/RepositoryService.\r\n xml, OSGI-INF/CoreExtensions.xml, OSGI-INF/LifeCycleService.xml, OSGI\r\n -INF/LifeCycleCoreExtensions.xml, OSGI-INF/lifecycle-listener-contrib\r\n .xml, OSGI-INF/SecurityService.xml, OSGI-INF/permissions-contrib.xml,\r\n  OSGI-INF/security-policy-contrib.xml, OSGI-INF/trash-migration.xml, \r\n OSGI-INF/trash-service.xml, OSGI-INF/versioning-service.xml, OSGI-INF\r\n /versioning-document-adapter.xml, OSGI-INF/versioning-default-policie\r\n s.xml, OSGI-INF/versioning-acl-contrib.xml, OSGI-INF/orphanVersionRem\r\n oval-listener-contrib.xml, OSGI-INF/orphanVersionsCleanup-listener-co\r\n ntrib.xml, OSGI-INF/document-resolver-contrib.xml, OSGI-INF/character\r\n -filtering-service.xml, OSGI-INF/character-filtering-service-contrib.\r\n xml, OSGI-INF/documentblobmanager-service.xml, OSGI-INF/uidgenerator-\r\n service.xml, OSGI-INF/uidgenerator-keyvalue-config.xml, OSGI-INF/Core\r\n SessionService.xml, OSGI-INF/scheduler-contrib.xml, OSGI-INF/deletion\r\n -action-config.xml, OSGI-INF/retention-and-hold-contrib.xml, OSGI-INF\r\n /asyncdigest-listener-contrib.xml, OSGI-INF/proxy-creation-configurat\r\n ion-contrib.xml, OSGI-INF/core-domain-event-producer-contrib.xml, OSG\r\n I-INF/scroll-contrib.xml, OSGI-INF/bulk-migration-action-contrib.xml\r\nImport-Package: javax.naming,javax.transaction;version=\"1.1\",javax.tra\r\n nsaction.xa;version=\"1.1\",javax.xml.parsers,org.apache.commons.lang,o\r\n rg.apache.commons.logging,org.apache.xml.serialize,org.nuxeo.common.c\r\n ollections,org.nuxeo.common.utils,org.nuxeo.common.xmap.annotation,or\r\n g.nuxeo.ecm.core.event,org.nuxeo.ecm.core.event.impl,org.nuxeo.ecm.co\r\n re.query,org.nuxeo.ecm.core.query.sql.model,org.nuxeo.ecm.core.schema\r\n ,org.nuxeo.ecm.core.schema.types,org.nuxeo.runtime,org.nuxeo.runtime.\r\n api,org.nuxeo.runtime.api.login,org.nuxeo.runtime.model,org.nuxeo.run\r\n time.services.event,org.nuxeo.runtime.services.streaming,org.nuxeo.ru\r\n ntime.transaction,org.osgi.framework;version=\"1.4\",org.w3c.dom\r\nBundle-SymbolicName: org.nuxeo.ecm.core;singleton:=true\r\nEclipse-ExtensibleAPI: true\r\n\r\n",
      "maxResolutionOrder": 795,
      "minResolutionOrder": 83,
      "packages": [],
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.core.event"
      ],
      "version": "2021.66.4"
    }
  ],
  "creationDate": 1738059524582,
  "key": "Nuxeo Platform-2021.66",
  "name": "Nuxeo Platform",
  "operations": [],
  "packages": [],
  "pluginSnapshots": {},
  "releaseDate": 1738059524582,
  "version": "2021.66"
}